多くの回答があり、それぞれがいくつかの点に触れています。うまくいけば、これはあなたに何が何か、どのように使用されているかの良い説明とともにあなたの答えを与えることができます。
click()
を使用すると、bind('click' ...)
の別名です。 bind()
を使用すると、イベントリスナーが設定されているときにそのままDOMが使用され、DOM内の一致する各要素に関数がバインドされます。つまり、$('a').click(...)
を使用すると、そのコードが実行されたときに見つかったDOM内のすべてのアンカータグのclickイベントに、指定された関数をバインドします。
live()
を使用することはjQueryの古い方法でした。 bind()
のようにイベントをバインドするために使用されましたが、コードが実行されたときにDOMの要素にバインドするだけでなく、DOMの変更をリッスンし、将来一致する要素にもイベントをバインドします。これは、DOM操作を行っていて、後でDOMに削除/更新/追加されるかもしれないが、DOMが最初にロードされたときに存在しないいくつかの要素にイベントが存在する必要がある場合に便利です。
今ではlive()
が償却される理由は、実装が不適切であるためです。 live()
を使用するには、最初にDOMの要素を少なくとも1つ選択する必要がありました(私はそう信じています)。また、関数のコピーが各要素にバインドされて実行されました。要素が1000個ある場合は、コピーされた関数がたくさんあります。
on()
関数の作成は、これらの問題を克服することでした。 DOM内で変更されないオブジェクトに単一のイベントリスナーをバインドすることができます(したがって、後でDOMに追加/削除される要素にon()
を使用して親オブジェクトにバインドすることはできません)。セレクタと一致する要素までバブリングされたときにのみ関数が実行されるように、要素「フィルタ」を適用します。つまり、1つの要素にバインドされている(コピーではなく)存在する関数が1つだけあることを意味します。つまり、DOM内の「ライブ」イベントを追加する方がはるかに優れています。
...それは違いとは何か、なぜそれぞれの関数が存在し、なぜlive()
が償却されるのかです。
私はjsfiddleのデモに感謝します。jsfiddleデモは、その違いを明確かつ簡単な方法で示しています。 – BobRodes