0

所以我目前正在为一个项目使用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。

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

4

2 回答 2

3

您正在使用.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
于 2012-07-19T21:28:22.650 回答
2

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

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

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

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

于 2012-08-03T00:06:25.103 回答