1

スクリプトでプロトタイプを使用して、Div の下のすべての Select タグを検出し、それぞれにイベント/オブザーバーを追加しています!

必要な要素を見つけるためのコードは次のとおりです。

Event.observe(window, 'load', function() {
  var tab=$("product-options-wrapper").descendants();
  var attCode=[];
  var j=0;

  for (i=0;i<tab.length;i++) {
    if (tab [i].tagName =="SELECT") {
      attCode[j++]=tab[i].id
    }
  }
});

必要なすべての ID があります。それぞれにオブザーバー (変更時) を追加するにはどうすればよいですか?

$(id).on("change", function(event) {
  alert(id+"__"+$(id).value);
});
4

3 に答える 3

3

プロトタイプは、すぐにイベント委任をサポートします。Event.onは、オプションの 2 番目のセレクター パラメーターを受け取ります。だからあなたの場合:

$("product-options-wrapper").on('click', 'select', function(event, element) {

  // This callback will only get fired if you've clicked on a select element that's a descendant of #product-options-wrapper
  // 'element' is the item that matched the second selector parameter, in our case, the select.

  ....

});

そのパラメーターは、任意の CSS セレクター文字列にすることができます。

$('my-element').on('click', '.some-class', function(event, element) { ... });

Element.selectもチェックしてください。これにより、元の質問のコードが基本的に 1 行に要約されます。

$("product-options-wrapper").select('select');

セレクター文字列が「select」であるため、これはややこしいようです (#product-options-wrapper の下にすべての SELECT 要素が必要です)。次のこともできます。

$$('#product-options-wrapper select');

これらは両方とも、一致した要素の配列を返します。

HTH

于 2012-10-24T14:35:31.197 に答える
0

div のクリック ハンドラーのみが必要です (つまり、event delegationを使用します) 。

var tab = $("product-options-wrapper");
tab.on('click',function(e){
  e = e || event;
  if ( /^select$/i.test((e.target || e.srcElement || {}).tagName) ){
    //do stuff
  }
});
于 2012-10-24T11:25:39.653 に答える
0

それはすべきです。さらにヘルプが必要な場合は、html またはjsfiddleを投稿してください。

$(function(){
    $('#product-options-wrapper select').on("change", function(e) {
       alert(id+"__"+$(this).val());
    });
});

.product-options-wrapper の先頭にある をクラスであることを示すのを忘れたと思いますか? それとも本当にタグですか?

于 2012-10-24T11:10:02.887 に答える