【发布时间】:2011-05-23 03:39:32
【问题描述】:
我有一个当前正在处理 .keypress 事件的函数,当用户对文本框中的某些内容进行正确处理时,它会执行一些代码,但我希望在用户清除文本框时也触发相同的事件 .change 无济于事,因为它在用户将焦点更改为其他内容后触发
谢谢
【问题讨论】:
-
如果你使用 type="search" 和默认的清除按钮,这里没有解决方案。
标签: javascript jquery
我有一个当前正在处理 .keypress 事件的函数,当用户对文本框中的某些内容进行正确处理时,它会执行一些代码,但我希望在用户清除文本框时也触发相同的事件 .change 无济于事,因为它在用户将焦点更改为其他内容后触发
谢谢
【问题讨论】:
标签: javascript jquery
keyup 事件将检测用户是否也清除了该框(即退格键引发事件,但退格键不会引发 IE 中的keypress 事件)
$("#inputname").keyup(function() {
if (!this.value) {
alert('The box is empty');
}
});
正如 Josh 所说,对于输入中按下的每个字符代码都会触发此操作。这主要只是表明您需要使用 keyup 事件来触发退格,而不是您当前使用的 keypress 事件。
【讨论】:
在您的 .keypress 或 .keyup 函数中,检查输入的值是否为空。例如:
$("#some-input").keyup(function(){
if($(this).val() == "") {
// input is cleared
}
});
<input type="text" id="some-input" />
【讨论】:
Jonathon Bolster 的解决方案并未涵盖所有情况。我对其进行了调整,以涵盖通过剪切和粘贴进行的修改:
$("#inputname").on('change keyup copy paste cut', function() {
//!this.value ...
});
见http://jsfiddle.net/gonfidentschal/XxLq2/
不幸的是,无法捕获使用 javascript 设置字段值的情况。如果您自己设置值,这不是问题,因为您知道何时执行此操作……但是当您使用诸如 AngularJS 之类的库时,它会在状态更改时更新视图,那么它可能需要更多的工作。或者您必须使用计时器来检查该值。
另请参阅Detecting input change in jQuery? 的答案,它表明现代浏览器可以理解“输入”事件。所以只是:
$("#inputname").on('input', function() {
//!this.value ...
});
【讨论】:
另一种简洁的方式是在 textarea/input-type:text fields 上监听“input”事件
/**
* Listens on textarea input.
* Considers: undo, cut, paste, backspc, keyboard input, etc
*/
$("#myContainer").on("input", "textarea", function() {
if (!this.value) {
}
});
【讨论】:
您可以在 on input' function() 中检查输入字段的值,并将其与 if/else 语句结合使用,它会在下面的代码中很好地工作:
$( "#myinputid" ).on('input', function() {
if($(this).val() != "") {
//Do action here like in this example am hiding the previous table row
$(this).closest("tr").prev("tr").hide(); //hides previous row
}else{
$(this).closest("tr").prev("tr").show(); //shows previous row
}
});
【讨论】: