在看到这个jsfiddle之前,我从未听说过jQuery中有一个事件叫做input。

你知道为什么有用吗?是keyup的别名吗?

$(document).on('input', 'input:text', function() {});

当前回答

当通过用户界面更改元素的文本内容时发生。

它不完全是keyup的别名,因为即使键不做任何事情,keyup也会触发(例如:按下然后释放Control键将触发keyup事件)。

考虑它的一个好方法是这样的:它是一个每当输入发生变化时就会触发的事件。这包括——但不限于——按下修改输入的键(例如,Ctrl本身不会触发事件,但Ctrl- v会触发一些文本)、选择自动完成选项、linux风格的中键粘贴、拖放以及许多其他操作。

更多细节请参阅本页和答案下方的评论。

其他回答

使用INPUT时要小心。在ie11中,此事件在聚焦和模糊时触发。但在其他浏览器中,更改会触发它。

https://connect.microsoft.com/IE/feedback/details/810538/ie-11-fires-input-event-on-focus

$("input#myId").bind('keyup', function (e) {    
    // Do Stuff
});

可以在IE和chrome浏览器中工作

使用jQuery,以下是相同的效果:

$('a').click(function(){ doSomething(); });
$('a').on('click', function(){ doSomething(); });

然而,对于输入事件,似乎只有第二种模式在我测试的浏览器中有效。

因此,你会期望这个工作,但它没有(至少目前):

$(':text').input(function(){ doSomething(); });

同样,如果你想利用事件委托(例如在输入之前在#容器上设置事件)。text被添加到DOM),这应该会出现在脑海中:

$('#container').on('input', ':text', function(){ doSomething(); });

可悲的是,再次,它不工作目前!

只有这个模式有效:

$(':text').on('input', function(){ doSomething(); });

编辑了更多的最新信息

我可以肯定这种模式:

$('#container').on('input', ':text', function(){ doSomething(); });

NOW也适用于所有“标准”浏览器。

当通过用户界面更改元素的文本内容时发生。

它不完全是keyup的别名,因为即使键不做任何事情,keyup也会触发(例如:按下然后释放Control键将触发keyup事件)。

考虑它的一个好方法是这样的:它是一个每当输入发生变化时就会触发的事件。这包括——但不限于——按下修改输入的键(例如,Ctrl本身不会触发事件,但Ctrl- v会触发一些文本)、选择自动完成选项、linux风格的中键粘贴、拖放以及许多其他操作。

更多细节请参阅本页和答案下方的评论。

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 */
    }
});