通过javascript确定更改了哪个字段

时间:2013-09-11 19:50:40

标签: javascript jquery checkbox

我在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的复选框)我想要以不同方式处理,而不是在表单更改事件中进行默认更改。

有没有办法告诉$('form')。bind('change')忽略对已验证复选框的任何更改?我想在复选框的“点击”事件中以不同的方式处理它。

或者,有没有办法可以在“更改”事件逻辑中确定表单中的哪个元素导致更改事件触发?这样,我可以检查是否是已更改的已验证复选框并忽略该事件。

感谢。

3 个答案:

答案 0 :(得分:2)

你应该使用event.target

$('form').bind('change', function (e) {

    if(e.target == $('#Verified').get()[0]){
        return ;
    }
    _changesMade = true;
    $("#ContractorName").val(null);
    $("#ContractDateApproved").val(null);
    $("#Verified").attr('checked', false);
});

这是一个jfiddle。

http://jsfiddle.net/NtYzn/

答案 1 :(得分: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.
});

Jsfiddle

答案 2 :(得分:0)

尝试:

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

或者

// Inside the change method
if (!$(this).is('input:checkbox')) {
  _changesMade = true;
}