我在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')忽略对已验证复选框的任何更改?我想在复选框的“点击”事件中以不同的方式处理它。
或者,有没有办法可以在“更改”事件逻辑中确定表单中的哪个元素导致更改事件触发?这样,我可以检查是否是已更改的已验证复选框并忽略该事件。
感谢。
答案 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。
答案 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.
});
答案 2 :(得分:0)
尝试:
$('input:checkbox').unbind('change'); // Do this after the form bind
或者
// Inside the change method
if (!$(this).is('input:checkbox')) {
_changesMade = true;
}