整个表格onChange

Mor*_*ori 33 javascript

我如何onChange为所有form元素使用或类似的事件?我不想onChange单独使用每个字段.

Ste*_*eve 38

如果您使用的是jQuery,则可以change在表单元素上使用该事件,因为在jQuery中事件会冒泡.

$('#formId').change(function(){...});
Run Code Online (Sandbox Code Playgroud)

如果您使用普通的javascript,则更改事件不会冒泡(至少不会跨浏览器).因此,您必须将事件处理程序分别附加到每个输入元素:

var inputs = document.getElementsByTagName("input"); 
for (i=0; i<inputs.length; i++){
   inputs[i].onchange = changeHandler;
}
Run Code Online (Sandbox Code Playgroud)

(当然,你必须对所有选择和textareas做类似的事情)

  • 现在似乎所有主流浏览器都支持`form onchange`. (10认同)
  • @Tony Merryfield:现在`formElement.addEventListener('change',doSomething);`适用于所有主流浏览器. (6认同)
  • @Mori 为什么不从你的评论中给出真正的答案? (2认同)

Mor*_*ori 22

您可以changeform元素上使用事件:

var form = document.querySelector('form');
form.addEventListener('change', function() {
    alert('Hi!');
});
Run Code Online (Sandbox Code Playgroud)

  • 六年后,竖起大拇指回答您自己的问题。 (4认同)
  • 谢谢。在做了一些测试之后 - 我会补充一点,这里的 'change' 事件非常适合这个,因为对于文本输入,它不会在每次按键时触发,但是,就像我们期望的那样 - 如果有一个模糊改变。就像这里:http://jsfiddle.net/54dftpL6/ - 所以它似乎是“在任何更改时自动保存表单”任务的**解决方案,我刚刚完成的时间比我预期的要短得多: ) (2认同)
  • 不是其表单元素的后代的表单控件(可能具有“form”属性)不会将事件冒泡到表单元素。为了适应这种情况,我们可以将事件监听器添加到“document.body”并检查“event.target.form”是否与预期的形式匹配。 (2认同)