0

そのため、現在、プロジェクトのHandsontable jQuery プラグインを使用しており、それを使用するためのカスタム関数をいくつか作成しました。

私が現在問題を抱えている関数は、現在選択されているセルを返すために書いたものです(ユーザーが複数ではなく1つだけを選択し、チェックされている場合)。

これが私のコードです:

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 に答える