2

MVC アプリケーションに多くのフィールドを持つフォームがあります。次のjavascriptを介してフィールドの変更を検出するためにjavascriptを使用しています:

var _changesMade = false;

    // Catch any other changes made and flag model as changed.
$('form').bind('change', function () {
    _changesMade = true;
    $("#ContractorName").val(null);
    $("#ContractDateApproved").val(null);
    $("#Verified").attr('checked', false);
});

// Warn user if there are unsaved changes.
$(window).bind('beforeunload', function () {
    if (_changesMade)
        return 'There are unsaved changes which will be lost if you continue.';
});

ただし、別の方法で処理し、フォーム変更イベントで行われたデフォルトの変更を行いたくないフィールド (Verified というチェックボックス) が 1 つあります。

$('form').bind('change') に検証済みチェックボックスへの変更を無視するように指示する方法はありますか? チェックボックスの「クリック」イベントで別の方法で処理したい。

または、「変更」イベント ロジックで、フォーム内のどの要素によって変更イベントが発生したかを判断できる方法はありますか? そうすれば、変更されたのが Verified チェックボックスであるかどうかを確認し、イベントを無視できます。

ありがとう。

4

3 に答える 3

1

私が正しく理解していれば、チェックボックスで何か違うことをしたいと思っています。このメソッドを使用しstopImmediatePropagationて、イベントをキャッチする他のハンドラーを停止できます。

$('#Verified').bind('change', function(event) {
    event.stopImmediatePropagation();
    //do whatever you need to here.
});

$('form').bind('change', function () {
    //do whatever you need to here.
});

ジャスフィドル

于 2013-09-11T20:05:06.353 に答える
0

試す:

$('input:checkbox').unbind('change'); // Do this after the form bind

または

// Inside the change method
if (!$(this).is('input:checkbox')) {
  _changesMade = true;
}
于 2013-09-11T20:02:42.157 に答える