2

重複の可能性:
jQuery 1.7 - live() を on() に変える

.live()私はjQueryが持つ機能が大好きでした。それを追加すると出来上がりです。識別子に一致する将来の要素はすべてその機能を持ちます。

その後、非推奨になり、使用するように勧められました.on()。しかし、うまくいきません。以下は、に配置されている私のコードです$(document).ready()

これは機能します

$('#membership_number').live('change',function(e) {
    alert("VALUE CHANGED");
});

これはしません

$('#membership_number').on('change',function(e) {
    alert("VALUE CHANGED");
});

同じ効果を達成する別の方法はありますか、それとも正しく.live()使用していませんか?.on()

4

4 に答える 4

5

イベントを親アイテムにサブスクライブし、バインドするセレクターを指定する必要があります。親に渡したくない場合は、ドキュメントを使用できます。詳しくはこちら

$(document).on('change', '#membership_number',function(e) {
    alert("VALUE CHANGED");
});

また

$('#parentId').on('change', '#membership_number',function(e) {
    alert("VALUE CHANGED");
});
于 2012-10-31T07:18:06.907 に答える
2

jQuery 1.7 以降で動的要素を処理する場合、 on セレクターを使用しています。イベントは、ページの読み込み時に準備ができて利用可能な静的要素にバインドされることが想定されているため、イベントはチェーンを適切にバブルアップし、親要​​素が見つかったときに発生します。

$(document).on('change', '#membership_number', function(e){
    alert("VALUE CHANGED");
});
于 2012-10-31T07:18:13.443 に答える
2

ハンドラーをアタッチするには、親要素を使用する必要があります。たとえば、ドキュメント。

$(document).on('change', '#membership_number', function(e) {
    alert("VALUE CHANGED");
});
于 2012-10-31T07:18:17.610 に答える
2

.on()セレクターと一致するまでイベントがバブルアップする方法のため、祖先要素でバインドする必要があります。これは、イベントをバインドする要素の祖先である DOM 内の任意のものです。

もちろん、究極の祖先であるdocument. 例えば:

$(document).on('change', '#membership_number', function(){});

.live()documentにイベントをバインドし、正しい要素でフィルタリングすることにより、実際に舞台裏でこれを行いました。イベントを発生させたい要素に対してできるだけローカルな要素を使用する方が効率的で実用的です。たとえば<li>、一部が動的に追加される要素でクリック イベントが必要な場合<li>は、イベントを親にバインドし、次のよう<ul>フィルター処理します。<li>

$('ul').on('click', 'li', function(){});

これは、各 で個別のクリック イベントをバインドするよりも効率的です<li>

于 2012-10-31T07:24:18.397 に答える