所以我现在正在为项目使用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。
任何帮助都会很棒!谢谢!
答案 0 :(得分: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
答案 1 :(得分:2)
目前有一种更好的方法可以在Handsontable中选择当前。只需使用Handsontable中的以下方法:
handsontable('getSelected')
- 返回当前所选单元格的索引 作为数组[topLeftRow
,topLeftCol
,bottomRightRow
,bottomRightCol
]的元素
handsontable('getCell', row, col)
- 返回给定row,col