2

これが私がやろうとしていることです:

私はそのようなhrefをたくさん持っています:

<a href='javascript:void(0);' class='popup'>Word</a>....more stuff....<a href='javascript:void(0);' class='popup'>Another Word</a>...

だから私のコードには次のようなものがあります:

$('.popup').live('click', function() {

    var selectedPopUp = $(this);

    //get all the popups 
var popupList = $('.popup');

   $.map(popuplist, function(thisPopUp, i) {

       if (selectedPopUp == thisPopUp) { 
          //do something
       }


   });

});

この方法でオブジェクトを一致させることができると思いましたが、ログに記録すると、次のようになります。

selectedPopup:[a.popupObj#]

thisPopUp:<a class="popupObj" href="#">

ポップアップを表示するためのこれらすべてのプロパティを保持するオブジェクトがあるため、selectedPopupのインデックス番号が必要なため、これを行っています。明らかに私はここで間違った方法で進んでいます、誰かが私をまっすぐに設定できますか?

ありがとう

4

3 に答える 3

2

1つのHTML要素を関連するデータセットまたは少なくともIDと一致させようとしているようです。relこれは、プロパティを使用する絶好の機会です。

したがって、単語のリンクは次のようになります。

<a rel="1" href="#" class="popup">Word</a>

(ちなみに、使用しないでくださいhref='javascript:void(0);'-preventDefaultイベントオブジェクトで使用するか、falseを返します)

これで、ハンドラーは次のようになります。

$('.popup').on('click', function(e) {
    e.preventDefault();

    var selectedPopUp = $(this).attr('rel');

    // code follows
});

dataさらに、次の属性を利用できます。

<a href="#" data-title="My popup title" data-content="Blah blah blah!" class="popup">Word</a>

次に、ハンドラーは次のようになります。

$('.popup').on('click', function(e) {
    e.preventDefault();

    var title = $(this).data('title');
    var content = $(this).data('content');

    alert(title+"\n"+content);
});

試してみてください:http://jsfiddle.net/x4YmG/

onまた、。ではなく、メソッドを使用してイベントをバインドする必要があることにも注意してくださいlive。jQuery 1.7以降、このliveメソッドは非推奨になりました。

関連ドキュメント

于 2012-08-14T18:04:52.103 に答える
1

ここにはいくつかのことがあります。

map通常、コレクション内のすべての要素に関数を適用するために使用されます

例えば、

a = [1,2,3,4]
$.map(a, function(e, i) {
  return e + 1;
});
# => [2,3,4,5]

代わりに探しているeachのは、要素のコレクションを反復処理できるようにすることです。

a = [1,2,3,4]
$.each(a, function(e, i) {
  if(e % 2 == 0) {
    console.log(e);
  }
});
# => 2
# => 4

エラーが発生する理由は、selectedPopUp = $(this)です。

これは、DOM要素(thisPopUp)をjQueryセレクター()と比較していることを意味します$(this)

これが実際の例を含むJSFiddleです:http://jsfiddle.net/28D3h/2/

最後に、好奇心から-リストから要素を選択できるようにするために実際に必要なことを実行できるようにするために、正確に何が必要ですか?

于 2012-08-14T18:15:57.157 に答える
0

コンポーネントに適切なロジックがある場合は、jquery index()i関数を使用してアンカーのインデックスを取得し、それを関数のインデックスと比較することができ.map()ます。

$('body').on('click','.popup', function() {

   var selectedPopUp = $(this);

   //get all the popups 
   var popupList = $('.popup');
   $.map(popupList, function(thisPopUp, i) {
      console.log(thisPopUp + ' = ' + selectedPopUp.index() + ' y i = ' + i);

      if (selectedPopUp.index() == i) { 
         alert('you selected me!')
      }
   });
});​

これが実際の例です。

于 2012-08-14T18:36:17.113 に答える