要查找input
元素何时更改,我们可以简单地执行以下操作:
$('input').change(function(){
console.log('Something has changed');
});
这将捕获页面上所有input
元素上的所有事件,但在您的情况下,我们有以下内容:
选择input
器不会匹配所有这些。但是,不要惊慌!我们仍然可以做到这一点。聪明的一点是,在 DOM 中,所有祖先元素都会收到在其祖先上发生的事件的通知。例如,单击 aspan
内部的 adiv
将通知两个元素单击已发生。
所以在这种情况下,我们只需要找到一个包含所有这些元素的共同祖先元素,并在其上捕获事件。显而易见的使用是form
:
$('form').change(function(){
console.log('Something has changed');
});
然而,这可能不是我们能做的最好的。例如,最好有一种快速访问已更改元素的方法。如果我们能确保没有其他元素可以触发该功能,那也很好。jQuery 通过该on
函数为我们实现了这一点。这允许我们将处理程序附加到form
元素并确保原始元素与选择器匹配,然后this
在函数内部为我们提供对该元素的引用。
此代码可能如下所示:
$('form').on('change', 'input, select, textarea', function() {
console.log('Something has changed in an element called ' + this.name;
});
您的编辑表明您希望能够在某个时候禁用处理程序。
有两种方法可以做到这一点。第一个简单粗暴:
$('form').off('change');
将不再捕获更多change
事件form
。但是,如果要重新启用它,则必须经历重新绑定事件处理程序的整个过程。另一种选择是有一个变量来告诉您是否应该启用事件处理程序:
var enabled = true;
$('form').on('change', 'input, select, textarea', function() {
if (enabled) {
console.log('Something has changed in an element called ' + this.name;
}
});
然后,您可以通过设置enabled
来禁用处理程序false
,并通过再次设置来重新启用它true
。