1

これが私が達成しようとしていることの簡単な例です:http://jsfiddle.net/easLc/

HTML

<div class="bar">
  <div class="apple"> apple</div>
  <div class="banana"> banana</div>
  <div class="citrus"> citrus </div>
</div>

jQuery

function showAlert(event) {
    inventory = event.data.inventory;
    alert(inventory);        
}

fruits = ["apple", "banana", "citrus"];
inventory = [13, 45, 99];

for (i in fruits) {        
    $(".bar ."+fruits[i]).on("click", {inventory:inventory[i]},showAlert);
}

ハンドラーに渡すインベントリデータは動的であり、例のように静的ではありません。非同期呼び出しからインベントリデータを取得しています。インベントリデータが更新されるたびに、ハンドラーにその情報を再度取得させるのではなく、このデータをハンドラーに渡したいと思います。

私が気付いているのは、いくつかのクリックで、ハンドラー(私は思う)が私のブラウザーをクラッシュさせています。誤って作成するハンドラーが多すぎませんか?作成されたハンドラーを確認するにはどうすればよいですか?または、クリックイベント中に何が起こりますか?console.logをハンドラーに追加しようとしましたが、コンソールに表示されません。

ありがとう!

4

2 に答える 2

1

試す

$(".bar ."+fruits[i]).off('click',showAlert).on("click", {inventory:inventory[i]},showAlert);

これにより、以前にバインドされたイベントが削除され、再バインドされます...しかし、それが問題の本当の原因であるかどうかを判断するのは困難です。showAlertにconsole.log('text')を追加して、複数回呼び出されているかどうかを確認できます。

于 2012-10-09T15:09:24.297 に答える
1

バインドされた要素にある種のデータを追加することで、複数のバインドを防ぐことができます(クリーンな方法はクラスですが、標準ではメタデータが優先される場合があります)。

$(".bar ." + fruits[i]).not(".bound").on('click', {...}).addClass('bound');
于 2012-10-09T14:47:23.910 に答える