0

いくつかの要素を作成してから、それらをさまざまなメソッドにバインドしようとしています。

for( key in object ){
  var vals = someMap[key];
  var element = jQuery(parentElements[key]).find('.someClass');
  var markup;
  for( someKey in vals ){
      markup += "<a href='#' >" + vals[someKey] + "</a>";
  }
  jQuery(element).empty().html(markup);
  jQuery(element).find('a').bind('click', function(element){ alert(key); });
}

このコードを実行した後、すべてのアンカー要素を作成できるようになりました。アラートは、アンカータグが作成されたキーを出力する必要があります。たとえば、key1とkey2の2つのキーがある場合、アンカータグは内部に作成されます。 parentElements[key1]とparentElements[key2]なので、アンカータグをクリックするたびに、クリックしたアンカータグに応じて、key1またはkey2のいずれかでアラートが表示されるはずです。ただし、問題は常にkey2にアラートが送信されることです。したがって、ここでの問題は、クリックが実行されるまでバインディングが遅延することである可能性があり、実行されると、アラートされたキーの値は常に最後のキー、つまりkey2になると思います。ここでの問題が何であるかはよくわかりませんが、常に最後のキーがアラートされているため、両方のループが完了した最後にバインディングが発生しているように見えます。

それで、私が間違っていることはありますか、それとも別の方法でそれを行う必要がありますか?どんな助けでもありがたいです(多分質問はあまり説明的ではありません、私がそれを何か他のものと取り替えるべきである場合に備えて私に知らせてください)。

4

2 に答える 2

0

後で追加された要素にイベントをアタッチするためにバインドを使用している可能性があります。そのため、機能しません。ライブまたはオンで使用してみてください...

于 2012-06-22T12:23:29.293 に答える
0

これを試して:

for( var key in object ){
  var vals = someMap[key],
      element = jQuery(parentElements[key]).find('.someClass');
  element.empty();
  for( var someKey in vals ) {
      var anchor = jQuery("<a href='#'>" + vals[someKey] + "</a>");
      element.on('click', anchor, function(){ alert(key); }).append(anchor);
  }
}

ヒント: 常に for ループを var ... in ... で初期化してください。そうしないと、どこにでもグローバル変数があり、他のループに干渉する可能性があります。

于 2012-06-22T12:32:33.927 に答える