-2

私はこの奇妙なコードの寄せ集めにマッシュアップされたjqueryとjavascriptを少し使用しています。

var SELECTED_ELEMENT;  //this ends up being a JS array of ELEMENTS like the following line.
SELECTED_ELEMENT.push($(this).closest(".draggable"));
//Now i wanted to select stuff
$(".draggable").click(function(){
   var found = 0;
   for (var i = 0; i < SELECTED_ELEMENT.length; i++){
      if(SELECTED_ELEMENT[i] == this){
         found = 1;
      }
   }
   if(found == 1){
      alert("yep");
   }else{
      alert("nope");
   }
});
//this doesnt seem to do what i want.

当面の問題は、たとえそうであったとしても、これが決して真に戻らないということです。私はちょうどjavascriptでそれを配列で検索する方法を見つけようとしていました。配列を単純に検索するとわかると思いますが、「this」への不適切な参照である可能性があります。

4

3 に答える 3

2

いくつかの問題がありますint found = 0。たとえば、JavaScriptでもありません。次に、jQueryオブジェクトを配列にプッシュし、それらをdom要素と比較します。

代わりに要素をプッシュします。

var selectedElements = [],

    closest = $(this).closest(".draggable")[0];

if( closest ) {
    selectedElements.push( closest );
}

$(".draggable").click( function() {
    var index = selectedElements.indexOf(this);

    alert( index > -1 ? "yep" : "nope" );
});

デモ: http: //jsfiddle.net/sqj42/

于 2012-08-13T15:33:36.037 に答える
1

2行目には、SELECT_ELEMENTの代わりにがありSELECTED_ELEMENTます。

そしてこれはより短いです:

if(SELECTED_ELEMENT.indexOf(this) != -1)
    alert('yep');
else
    alert('nope');
于 2012-08-13T15:31:46.973 に答える
0

私が見つけたものを探していた本当の答え:

私の検索は間違っています。そのはず:

var found = 0;
for(var i = 0; i < SELECTED_ELEMENT.length; i++){
   if ( this == SELECTED_ELEMENT[i][0] ){  //the key is the extra [0] as the stored element is a jquery object, so it needs to be de-referenced by selecting the object itself and not the jquery wrapper-thingy for it..
      found = 1;
   }
}
if(found == 1){
    alert("yep");
}else{
    alert("nope");
}
于 2012-08-13T16:36:25.423 に答える