2017-01-16 7 views
0

jQuery Migrateと組み合わせてjQueryにはあまり知られていません。私が働いているサイトでは、以下のスクリプトを検索するいくつかは、ページのロード時に正常に動作した後の移行バージョン1.4.1フィルタを使用した後でコードを再アクティブ化する

でjQueryの1.12を使用しています。

jQuery(".single_add_to_cart_button").click(function(e) { 
    e.preventDefault(); 
    var url = jQuery(this).data('href'); 
    window.open(url, '_blank'); 
    return false; 
}); 

しかし、いくつかのフィルタの後、このリスナーを昔ながらの方法を構築します「忘れられている」

どうすればよいですか?

+0

を '.single_add_to_cart_button'要素が削除された場合と、委任されたイベントハンドラを使用する必要があります。 –

答えて

1

リスナーが接続されている要素を削除しています。これはおそらくフィルタリング時に発生します。親要素にリスナーを設定した場合、リスナーは削除されません(たとえば、<td><table>要素の場合)。リスナーをトップレベル(document)に設定しないのは、削除されていない親に設定するほうがはるかに性能が高いからです。リスナーをdocumentに設定すると、すべてのクリックが監視され、.single_add_to_cart_button要素が検索されます。

あなたが親にリスナーを設定することができますが、唯一のあなたは以下のコードを使用する場合.single_add_to_cart_buttonのクリックに反応する:あなたはDOMで再現その後、

jQuery("#tableWithId").on("click", ".single_add_to_cart_button", function(e) { 
    e.preventDefault(); 
    var url = jQuery(this).data('href'); 
    window.open(url, '_blank'); 
    return false; 
}); 
+0

Jeez。最初はjQuery(ドキュメント)が動作しませんでした。とにかくThanx –

1

.single_add_to_cart_buttonと一致する要素が削除されて再追加された場合、委任を使用する必要があります。常に存在する要素(body、document)にリスナーを配置し、次のようになります。

jQuery(document).on('click', '.single_add_to_cart_button', function (e) { 
    e.preventDefault(); 
    var url = jQuery(this).data('href'); 
    window.open(url, '_blank'); 
    return false; 
}); 
関連する問題