Javascript函数无法返回元素

时间:2012-07-19 21:22:19

标签: javascript jquery handsontable

所以我现在正在为项目使用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)console.log(cell),我获得false返回值。

我最初的想法是,某种程度上坐标会关闭,因此找不到符合条件的元素,所以我试图通过添加...来检查...

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

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

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

2 个答案:

答案 0 :(得分:3)

您正在使用.each()功能

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

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

快速修复:

var result = false;
<...>.each(function(){
    if (<condition>) {
        result = <found element>;
        return false; // break each-loop
    }
});
return result; // still false if nothing found

答案 1 :(得分:2)

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

  

handsontable('getSelected') - 返回当前所选单元格的索引   作为数组[topLeftRowtopLeftColbottomRightRowbottomRightCol]

     

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

的元素

此处描述了所有方法:https://github.com/warpech/jquery-handsontable