在看到这个jsfiddle之前,我从未听说过jQuery中有一个事件叫做input。
你知道为什么有用吗?是keyup的别名吗?
$(document).on('input', 'input:text', function() {});
在看到这个jsfiddle之前,我从未听说过jQuery中有一个事件叫做input。
你知道为什么有用吗?是keyup的别名吗?
$(document).on('input', 'input:text', function() {});
当前回答
使用INPUT时要小心。在ie11中,此事件在聚焦和模糊时触发。但在其他浏览器中,更改会触发它。
https://connect.microsoft.com/IE/feedback/details/810538/ie-11-fires-input-event-on-focus
其他回答
我认为'input'在这里的工作方式与'oninput'在DOM级别O事件模型中的工作方式相同。
顺便说一下:
Just as silkfire commented it, I too googled for 'jQuery input event'. Thus I was led to here and astounded to learn that 'input' is an acceptable parameter to jquery's bind() command. In jQuery in Action (p. 102, 2008 ed.) 'input' is not mentionned as a possible event (against 20 others, from 'blur' to 'unload'). It is true that, on p. 92, the contrary could be surmised from rereading (i.e. from a reference to different string identifiers between Level 0 and Level 2 models). That is quite misleading.
Oninput事件对于跟踪输入字段的变化非常有用。
但是IE版本< 9不支持。但是较旧的IE版本有自己的专有事件onpropertychange,其功能与oninput相同。
所以你可以这样用:
$(':input').on('input propertychange');
有一个完整的跨浏览器支持。
因为任何属性更改都可以触发propertychange,例如,disabled属性被更改,那么你想要做的是:
$(':input').on('propertychange input', function (e) {
var valueChanged = false;
if (e.type=='propertychange') {
valueChanged = e.originalEvent.propertyName=='value';
} else {
valueChanged = true;
}
if (valueChanged) {
/* Code goes here */
}
});
$("input#myId").bind('keyup', function (e) {
// Do Stuff
});
可以在IE和chrome浏览器中工作
正如claustrofob所说,IE9+支持oninput。
但是,“oninput事件在ie9中有bug。当通过用户界面从文本字段中删除字符时,只有在插入字符时才会触发它。虽然Internet Explorer 9支持onpropertychange事件,但与oninput事件类似,它也有bug,在删除时不会触发。
由于字符可以通过多种方式删除(退格键和删除键,CTRL + X,上下文菜单中的剪切和删除命令),因此没有很好的解决方案来检测所有更改。如果使用上下文菜单的Delete命令删除字符,则无法在ie9的JavaScript中检测到修改。”
我有很好的结果绑定到输入和键下(和键下,如果你想让它在IE中,同时按住退格键)。
当通过用户界面更改元素的文本内容时发生。
它不完全是keyup的别名,因为即使键不做任何事情,keyup也会触发(例如:按下然后释放Control键将触发keyup事件)。
考虑它的一个好方法是这样的:它是一个每当输入发生变化时就会触发的事件。这包括——但不限于——按下修改输入的键(例如,Ctrl本身不会触发事件,但Ctrl- v会触发一些文本)、选择自动完成选项、linux风格的中键粘贴、拖放以及许多其他操作。
更多细节请参阅本页和答案下方的评论。