根据我的经验,input type="text"
onchange
事件通常只在你离开(blur
)控件之后才会发生.
有没有办法强制浏览器onchange
每次textfield
内容更改时触发?如果没有,那么"手动"追踪这个最优雅的方式是什么?
使用onkey*
事件是不可靠的,因为您可以右键单击该字段并选择"粘贴",这将更改该字段而不需要任何键盘输入.
是setTimeout
唯一的方法吗?丑陋的:-)
这几天听oninput
. 感觉就像onchange
没有必要失去对元素的关注.这是HTML5.
它受到所有人(甚至是移动设备)的支持,除了IE8及以下版本.对于IE添加onpropertychange
.我这样使用它:
const $source = document.querySelector('#source');
const $result = document.querySelector('#result');
const typeHandler = function(e) {
$result.innerHTML = e.target.value;
}
$source.addEventListener('input', typeHandler) // register for oninput
$source.addEventListener('propertychange', typeHandler) // for IE8
// $source.addEventListener('change', typeHandler) // fallback for Firefox for
更新:
见另一个答案(2015年).
2009年原创答案:
那么,您希望onchange
事件在keydown,blur 和 paste 上触发吗?这太神奇了.
如果要在键入时跟踪更改,请使用"onkeydown"
.如果需要使用鼠标捕获粘贴操作,请使用"onpaste"
(IE,FF3)和"oninput"
(FF,Opera,Chrome,Safari 1).
1 在Safari上打破.请
textInput
改用
下面的代码适用于Jquery 1.8.3
HTML:
使用Javascript/JQuery的:
$("#myId").on('change keydown paste input', function(){ doSomething(); });
Javascript在这里是不可预测和有趣的.
onchange
仅在模糊文本框时才会出现
onkeyup
&onkeypress
并不总是发生在文本更改上
onkeydown
在文本更改时发生(但无法通过鼠标单击跟踪剪切和粘贴)
onpaste
&oncut
有按键,甚至用鼠标右键单击发生.
因此,跟踪文本框中的变化,我们需要onkeydown
,oncut
和onpaste
.在这些事件的回调中,如果检查文本框的值,则在回调后更改值时不会获得更新的值.因此,解决此问题的方法是设置超时功能,超时为50毫秒(或可能更短)以跟踪更改.
这是一个肮脏的黑客,但这是我研究的唯一方法.
这是一个例子. http://jsfiddle.net/2BfGC/12/
onkeyup
例如,t
当你按下手指后按下动作时会发生这种情况,但是keydown
在我对角色进行数字处理之前动作就会发生t
希望这对某人有帮助.
因此onkeyup
,当您想要发送刚刚输入的内容时,这样做会更好.
我有类似的要求(推特风格的文字字段).用过onkeyup
和onchange
.onchange
实际上在从现场失去焦点时处理鼠标粘贴操作.
[更新]在HTML5或更高版本中,用于oninput
获取实时字符修改更新,如上面的其他答案中所述.
如果您仅使用Internet Explorer,则可以使用以下命令:
希望有所帮助.
我认为在2018年使用该input
活动会更好。
--
如WHATWG规范所述(https://html.spec.whatwg.org/multipage/indices.html#event-input-input):
当用户更改值时在控件上触发(另请参见change事件)
--
以下是使用方法的示例: