根据我的经验,input type="text" onchange事件通常仅在您离开 ( blur) 控件后发生。
input type="text"
onchange
blur
有没有办法强制浏览器在onchange每次textfield内容更改时触发?如果不是,那么“每年”跟踪这个最优雅的方法是什么?
textfield
使用onkey*事件并不可靠,因为您可以右键单击字段并选择粘贴,这将更改字段而无需任何键盘输入。
onkey*
是setTimeout唯一的方法吗?..丑:-)
setTimeout
更新:
请参阅另一个答案: 这几天听着oninput。 感觉就像onchange不需要失去对元素的关注。它是 HTML5。
oninput
所有人(甚至是移动设备)都支持它,除了 IE8 及更低版本。对于 IE 添加onpropertychange. 我这样使用它:
onpropertychange
const source = document.getElementById('source'); const result = document.getElementById('result'); const inputHandler = function(e) { result.innerHTML = e.target.value; } source.addEventListener('input', inputHandler); source.addEventListener('propertychange', inputHandler); // for IE8 // Firefox/Edge18-/IE9+ don’t fire on <select><option> // source.addEventListener('change', inputHandler); <input id="source"> <div id="result"></div>
2009 年原始答案:
那么,您希望onchange事件在 keydown、blur 和 paste 时触发?那是魔法。
如果您想在输入时跟踪更改,请使用"onkeydown". 如果您需要用鼠标捕获粘贴操作,请使用"onpaste"( IE , FF3 ) 和"oninput"( FF, Opera, Chrome, Safari 1 )。
"onkeydown"
"onpaste"
"oninput"
1在 Safari 上损坏。改为<textarea>使用textInput
<textarea>
textInput