1

ボタンの可視性を切り替えると、そのボタンでクリックイベントが呼び出される回数に影響を与えるように見えるという奇妙な問題があります。

私が使用する場合: $('button').on('click'...)、ボタンをクリックする前にページ全体の読み込みを行っていれば、ボタンをクリックするのに1回のクリックイベントのみが発生します。代わりに、AJAX 経由でボタンを含むページ フラグメントをロードしてからボタンをクリックすると、on()関数は複数のクリック イベントを発生させ、この方法でページをロードするたびに 1 つ追加されます。

を使用して、これらの複数のクリックが発生するのを制限できますが$('button').one('click', ...、これはあまりにもハックっぽいので、最初に複数のクリックイベントが発生する原因を修正したほうがよいのではないかと思います。

可視性を切り替える前に、この問題に遭遇したことがありますか-/+ AJAXページの読み込みは、クリックハンドラで発生するクリックイベントの数に影響しますか?

ありがとう、

ティム

4

2 に答える 2

1

jQuery Docs for One()hack-ishの最初の行で、この関数が設計された目的が説明されているわけではないと思います。

要素のイベントにハンドラーをアタッチします。ハンドラは要素ごとに最大 1 回実行されます。

これは、イベントの複数の発生を防ぐことを簡単に示しています。

この関数の内部動作原理は、@mgraph で言及されているものと同じであり、ドキュメントで言及されています。

このメソッドの最初の形式は、ハンドラーが最初の呼び出し後にバインド解除されることを除いて、.bind() と同じです。jQuery 1.7 で導入された 2 番目の 2 つの形式は、デリゲートされた要素でイベントが最初に発生した後にハンドラーが削除されることを除いて、セレクターが何かに一致したかどうかに関係なく、.on() と同じです。

もう少し詳しく -

このメソッドは通常、 /を使用してイベントをハンドラーにバインドし、イベントが 1 回だけ発生するとすぐに、.bind()/を使用してイベントのバインドを解除します。.on().unbind().off()

于 2012-04-28T20:14:43.003 に答える
1

AJAX 経由で要素をロードする場合は、.on() のバインディング プロパティを使用して、ページのロード時に存在する要素に関連付けます。たとえば$("body").on("click", "p", ...、ページがロードされたときだけでなく、AJAX 呼び出しの後にも、クリック要素を p タグにバインドします。単純に$("p").on("click", ...これを行うと、ページがロードされたときにクリックイベントが p 要素にバインドされるだけです。したがって、最初の例では、バインドする要素の親要素 (本体よりも具体的であることが望ましい) を選択し、.on() の呼び出し内でその要素を指定します。したがって、あなたの場合は、試してみることをお勧めします$('body').on('click','button', ...)

ああ、補足として、jQuery 1.7 の時点では、.on() および .off() メソッドは、.bind() および .unbind() よりも要素のイベント ハンドラーをアタッチおよび削除するために優先されます。

于 2012-04-28T20:19:40.690 に答える