0

同じ要素にバインドされている 2 つのイベントに問題があります。基本的に、1 つのイベントはすべてのチェックボックスにバインドされ、1 つのイベントは特定のチェックボックス (#ID 付き) にバインドされます。それらは同時にトリガーされますが、ID 固有のイベント コードを最初に実行する必要があります。

これら 2 つのイベントはまったく同時にトリガーされますが、一般的なチェックボックス イベントで [検索] ボタンがクリックされるに #valid_only のイベントが実行されるようにします。

.on('change', '#search-form input:checkbox', function() {
    $('#reset').button('enable');

    $('#search').trigger('click');
}).on('change', '#valid_only', function() {
    $('input:hidden[name="valid"]').val($(this).is(':checked') ? true : '');
    $('input:hidden[name="total"]').val($(this).is(':checked') ? '' : true);

    if (!$('#stats td[data-tag="months_to_expiry"], #stats td[data-tag="expired"]').hasClass('current')) {
        $('#stats td[data-tag="valid"]').toggleClass('e', !$('#valid_only').is(':checked')).toggleClass('current',  $('#valid_only').is(':checked'));
        $('#stats td[data-tag="total"]').toggleClass('e',  $('#valid_only').is(':checked')).toggleClass('current', !$('#valid_only').is(':checked'));
    }
});
4

3 に答える 3

1

JavaScript では「同時に」何も起こりません。(ほとんどの場合) シングル スレッドです。イベントは、ハンドラーの登録順に正確にトリガーされます。

#valid_onlyしたがって、事前に登録する必要があります#search-form input:checkbox

イベントがより一般的なハンドラーにバブルアップしないようにするために、より具体的なハンドラーを呼び出す必要がある場合があります。event.stopPropagation()

于 2013-10-28T09:59:43.283 に答える
0

いくつかの関数に 2 番目の部分を配置し、「#search-form input:checkbox」関数が終了したら、その関数を呼び出すだけです。

.on('change', '#search-form input:checkbox', function() {
    $('#reset').button('enable');

    $('#search').trigger('click');
    foo_function();
});

function foo_function(){/* second part of "on change" */}
于 2013-10-28T10:02:28.780 に答える
0

これに頼らないでください。コードの実行順序を強制します。

.on('change', '#search-form input:checkbox', function() {
    if ( $(this).id() === 'valid_only' ){
        updateVisibilityValid( $(this).is(':checked') );
    }

    $('#reset').button('enable');
    $('#search').trigger('click');
}
于 2013-10-28T09:59:48.060 に答える