Javascript 函数无法返回元素

IT技术 javascript jquery handsontable
2021-03-03 21:59:19

所以我目前正在为一个项目使用Handsontable jQuery 插件,并且我已经编写了一些自定义函数来使用它。

我目前遇到问题的函数是我编写的一个返回当前选定单元格的函数(当用户只选择了一个,而不是多个,并且是选中的)。

这是我的代码:

function getCurrentCell(){
    var selection = $('div.current');
    var left = selection.offset().left;
    var right = left + selection.width();
    var top = selection.offset().top;
    var bottom = top + selection.height();
    $('div.active').find('table').find('td').each(function(){
        if($(this).offset().left >= left && $(this).offset().left <= right && $(this).offset().top >= top && $(this).offset().top <= bottom){
            return this;
        }
    });
    return false;
}

但是,每当我调用函数时,例如:

var cell = getCurrentCell();

然后尝试alert(cell)or console.log(cell),我得到一个false返回值。

我最初的想法是坐标会以某种方式关闭,因此找不到符合条件的元素,因此我尝试通过添加...

$(this).css('background-color', 'black');

...就在这return this条线之前这样,如果找到正确的表格单元格,它将在实际返回代码之前显示在屏幕上。有趣的是,正确的单元格总是正确更改其背景颜色。因此,此函数正在查找正确的单元格,并且它正在 if 循环中执行代码,但是当我尝试将返回值捕获到变量中时,该变量始终为 false。

任何帮助都会很棒!谢谢!

2个回答

您正在使用.each()一个函数

.each(function(){
    ...
    return this;
});
return false;

这将从回调返回(如果this,可能会停止每个循环false),但永远不会中断并从外部getCurrentCell函数返回所以,那个人总会回来的false

快速解决:

var result = false;
<...>.each(function(){
    if (<condition>) {
        result = <found element>;
        return false; // break each-loop
    }
});
return result; // still false if nothing found
我刚刚遇到了同样的问题。我的头撞了两个小时:P
2021-05-15 21:59:19

目前有一种更好的方法可以在 Handsontable 中获得当前选择。只需使用 Handsontable 中的以下方法:

handsontable('getSelected')- 以数组 [ topLeftRow, topLeftCol, bottomRightRow, bottomRightCol] 的形式 返回当前选定单元格的索引

handsontable('getCell', row, col) - 返回给定的元素 row,col

所有方法都在这里描述:https : //github.com/warpech/jquery-handsontable

这绝对是要走的路。尝试根据 DOM 的状态猜测所选单元格不是一个好习惯,因此在尝试查找所选单元格时应使用此解决方案。
2021-05-07 21:59:19