0

配列でjQueryの各メソッドを使用すると、ドロップ可能が正しい値を受け入れない理由を誰かが説明してください。同じコードで通常の JavaScript for ループを使用すると、正常に動作します。

なぜjQueryの各メソッドで動作しないのですか?

以下のフィドルとコード。
http://jsfiddle.net/BuGA9/

$(function() {
var answer = ["apple", "tree"];
$("p.sen").draggable({revert: 'invalid'});
$("#dropBox").droppable({
    accept: function(element){
        $word = element.text().trim();


        for (var index in answer) {
           if($word === answer[index] || rem($word) === answer[index] )  { 
            return true;
            } 
        }
        /*

        $(answer).each(function(index) {
            if($word === answer[index] || rem($word) === answer[index] )  {
            return true;
            } 
        });  
        */

    },
    drop: function(event, ui) {
        $( this )    
            .addClass("correct")
            .find( "p" )
                .html("Correct well done!!!!");   
   }
});
});

function rem(sentence) {
sentence = sentence.substring(0, sentence.length - 1);
return sentence;
}

ありがとう。

4

2 に答える 2

1

each の return は、受け入れ関数ではなく、反復関数からの値を返します。後で返すためには、スコープ外に変数を作成して設定する必要があります。

var isCorrect = false;            
 $(answer).each(function(index) {
 if($word === answer[index] || rem($word) === answer[index] )  {
   isCorrect = true;
   return false;
 } 
});  
return isCorrect;

また、可能な場合はネイティブ JavaScript ループを使用することをお勧めします。通常、jQuery はそれぞれ少し遅くなります。

http://jsperf.com/for-vs-foreach/37

于 2013-10-08T09:14:43.863 に答える
0

JQueryのドキュメントに従って

コールバック関数が false を返すようにすることで、特定の反復で $.each() ループを中断できます。false 以外を返すことは 、for ループの continue ステートメントと同じです。次の繰り返しにすぐにスキップします。

于 2013-10-08T09:10:49.927 に答える