有人可以告诉我change
和input
事件之间有什么区别吗?
我正在使用jQuery添加它们:
$('input[type="text"]').on('change', function() {
alert($(this).val());
})
它也适用于input
而不是change
。
相对于焦点,事件排序可能有些不同?
答案 0 :(得分:85)
根据this post:
oninput
事件。
onchange
。在某些情况下,它仅在元素失去焦点时发生。 onchange属性可用于:<input>
,<select>
和<textarea>
。
TL; DR:
oninput
:对文字内容进行的任何更改onchange
的:
<input />
:更改+失去焦点<select>
:更改选项
$("input, select").on("input", function () {
$("pre").prepend("\nOn input. | " + this.tagName);
}).on("change", function () {
$("pre").prepend("\nOn change | " + this.tagName);
}).on("focus", function () {
$("pre").prepend("\nOn focus | " + this.tagName);
}).on("blur", function () {
$("pre").prepend("\nOn blur | " + this.tagName);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" />
<select>
<option>Alice</option>
<option>Bob</option>
<option>Carol</option>
<option>Dave</option>
<option>Emma</option>
</select>
<pre></pre>
答案 1 :(得分:22)
当内容发生变化时,change
event
会在大多数浏览器中触发
元素丢失focus
,基本上是一组变化。与input
event
不同,您不会看到每次更改都会被解雇。
input
event
会同时触发更改内容的内容
元件。所以你会看到这个事件更频繁地发生。浏览器支持各不相同。
答案 2 :(得分:2)
这两个事件之间最明显的区别是原因是value
上的<input>
变化。
根据MDN:
又名
input
,value
或<input>
元素的<select>
被更改时,将触发<textarea>
事件。
input
随时会触发 value
发生变化。 change
有点复杂:
换一种说法,当用户提交了对元素
change
的更改时,<input>
,<select>
和<textarea>
元素会触发value
事件。与input
事件不同,不一定会为元素的change
的每次更改触发value
事件。
change
在用户更改value
时触发。确切触发时间取决于type
中的<input>
:
对于...
:checked
时,可通过键盘或鼠标单击公平警告浏览器善变,并不总是就事件达成共识。但是,这确实是规范,并且您应该能够依靠这些时间安排。
答案 3 :(得分:0)
MDN文档有明确的解释(不确定何时添加):
当用户提交了对元素值的更改时,将为
input
,select
和textarea
元素触发change事件。 与输入事件不同,不一定会针对元素值的每次更改触发更改事件。
https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/change_event