Jquery:当用户清除文本框时如何触发事件

trr*_*rrm 19 javascript jquery

我有一个当前正在处理.keypress事件的函数,当用户在文本框中对某些代码执行某些操作时,我也希望在用户清除文本框时触发相同的事件.更改无效,因为它在之后触发用户将焦点更改为其他内容

谢谢

Jon*_*ter 47

keyup事件将检测用户是否也清除了该框(即退格引发事件,但退格不会引发keypressIE中的事件)

$("#inputname").keyup(function() {

    if (!this.value) {
        alert('The box is empty');
    }

});
Run Code Online (Sandbox Code Playgroud)

的jsfiddle

正如Josh所说,对于在输入中按下的每个字符代码都会被触发.这主要是表明您需要使用keyup事件来触发退格,而不是keypress您当前使用的事件.

  • 值得指出的是,keyup/keypress不会捕获仅涉及鼠标的操作(突出显示全部,右键单击,剪切) (3认同)

Gon*_*hal 17

Jonathon Bolster的解决方案并未涵盖所有案例.我通过剪切和粘贴来修改它:

$("#inputname").on('change keyup copy paste cut', function() {
    //!this.value ...
});
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/gonfidentschal/XxLq2/

不幸的是,不可能捕获使用javascript设置字段值的情况.如果您自己设置值,那么这不是问题,因为您知道何时这样做...但是当您使用像AngularJS这样的库时,状态发生变化时会更新视图,那么它可能会更加有效.或者您必须使用计时器来检查值.

另请参阅检测jQuery中的输入更改的答案这表明现代浏览器理解"输入"事件.所以就:

$("#inputname").on('input', function() {
    //!this.value ...
});
Run Code Online (Sandbox Code Playgroud)