0

ページが実質的に読み込まれるまでトリガーを無効にするためにクラスを使用していたページがあります。クリップの例:


$('body').addClass('disable');

// mark unsaved changes
$('body:not(.disable)').on('change', '.CE', function(ev) {
    // mark_if_changed() is at the bottom of this file
    mark_if_changed($(this));
});

[...トリガーを起動せずにほとんどの動的コンテンツをロードします...]

$('body').removeClass('disable');

トリガーのポイントは、CEクラスのフィールドが変更されたときにデータベースを更新することです。上記を使用すると、機能しません。

「:not(.disable)」を削除すると、変更が更新されますが、最初のページの読み込み中に多くの不要なコールバックが呼び出されます。

jQuery 1.7では、.live()を使用して機能しました。1.9では、.on()を使用して機能しません。:not()を削除して、「disable」がクラス属性のメンバーであるかどうかをテストできますが、問題を修正するのではなく、ダクトテーピングのように感じます。

https://dragonstone-mill.com/tabbed.htmlは、私が使用しているページです。

上記のすべては、$(document).ready()に続いて整然と呼び出されます。関数とバインディングをロードするtabbed.htmlの〜ln:103を参照してください。

これを行うためのより良い/より正しい方法はありますか?

4

1 に答える 1

1

イベント ハンドラの設定が正しくありません。

これの代わりに:

$('body:not(.disable)').on('change', '.CE', function(ev) {

これを試して:

$(document).on('change', 'body:not(.disable) .CE', function(ev) {

現在、イベント ハンドラをアタッチするときにボディが無効になっているかどうかを確認しています。何があってもイベント ハンドラーをアタッチしたいが、セレクターが一致する場合にのみ実行します。それを試して、期待どおりに動作するかどうかを確認してください。

于 2013-02-26T16:38:17.673 に答える