2012-07-19 121 views
0

因此,我正在爲一個項目使用Handsontable jQuery插件,並且我已經編寫了一些自定義函數來處理它。Javascript函數無法返回元素

我目前遇到的問題是我編寫的函數返回當前選定的單元格(當用戶只選擇了一個,而不是多個,並檢查是)。

這裏是我的代碼:

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

我明白你的問題是使用這個函數,並且你找到了解決方案,爲什麼你的函數不工作,但我強烈建議你使用@warpech發佈的解決方案。不僅因爲Handsontable試圖保持邏輯和DOM分離,而且因爲如果屏幕上有多於幾十行,這會中斷。虛擬渲染將導致所選單元格不被渲染,這意味着即使您選擇了單元格,也無法使用DOM來找到它。而是使用'hotInstance.getSelected()'。 – ZekeDroid 2015-09-19 21:15:49

回答

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 
+0

Gaaaah!非常明顯:p謝謝! – 2012-07-19 21:30:32

+0

我剛纔遇到了同樣的問題..把我的頭痛了2個小時:P – 2012-07-19 21:33:54

2

目前存在於Handsontable獲取當前的選擇一個更好的辦法。只是使用下列方法從Handsontable:

handsontable('getSelected') - 返回當前選定的細胞 的索引作爲數組[topLeftRowtopLeftColbottomRightRowbottomRightCol]

handsontable('getCell', row, col) - 對於給定的row,col

返回元件

所有的方法都在這裏描述:https://github.com/warpech/jquery-handsontable

+0

這絕對是一種方式。嘗試猜測選定的單元格DOM給出的狀態並不好,所以當試圖找到所選單元格時應該使用這個解決方案。 – ZekeDroid 2015-09-19 21:13:21