【发布时间】:2011-11-02 13:54:10
【问题描述】:
我正在寻找一个 jquery/simple javascript(不是其他库)解决方案,它将一个事件设置为一个文本框,当文本框被更改时将触发? (不是在模糊之后)
无论如何更改(键盘字符键/制表符/回车键或鼠标粘贴),我都需要它触发,而且我只需要触发一次。
【问题讨论】:
-
'onchange' 事件是否不适用于您的文本框?
标签: javascript jquery
我正在寻找一个 jquery/simple javascript(不是其他库)解决方案,它将一个事件设置为一个文本框,当文本框被更改时将触发? (不是在模糊之后)
无论如何更改(键盘字符键/制表符/回车键或鼠标粘贴),我都需要它触发,而且我只需要触发一次。
【问题讨论】:
标签: javascript jquery
很遗憾,没有。总有一天,所有浏览器都支持textinput event 和/或HTML5 input event,但目前并非所有浏览器都支持have various bugs。您可以使用事件组合,但您必须自己处理对每个更改的响应一次,并且总是有可能无法在某个地方覆盖某些浏览器。
因此,如果您绝对必须这样做,则必须每 N 毫秒轮询一次 value 属性。 (选择您满意的最大数字,以避免浏览器工作过于费力,并确保计时器函数中的代码尽可能紧凑和快速 - 例如,不要重新- 每次查找元素,查找一次并保留对它的引用。)
【讨论】:
input 事件。 stackoverflow.com/questions/5519936/jquery-keyboard-events/…。适用于除 IE propertychange 事件。
input 事件。目前,我认为轮询仍然是唯一真正可靠的机制。希望这会在未来几年内有所改变。
你可以绑定keyup事件。
$("textarea").bind("keyup", function() {
// Fires after the user has typed
});
【讨论】:
除了另一个答案中概述的bind 方法,您还可以这样做:
$("#txtTest").keyup(function(){
alert($(this).val());
});
【讨论】:
var obj = document.getElementById("field");
var func= function(){
alert('hi');
}
obj.onkeypress= func;
obj.onclick = func;
obj.on... = func;
【讨论】:
change 在用户退出该字段之前不会被触发。
您可以使用 jQuery keydown 或 keyup。
var target = jQuery('#id');
target.keydown( function () { alert('hi'); } );
现在,既然你只想被调用一次,你所要做的就是在它被调用后立即解除绑定:
target.keydown( function () { alert('hi'); target.unbind('keydown'); } );
【讨论】:
我用过 T.J. Crowders 的回答并想出了这个代码:
(function() {
setInterval(function() {
var validated = false;
if ($('#mytextinput').val() !== '' && validated === false) {
// perform validation or whatever you need
validated = true;
}
else {
validated = false;
}
}, 500);
})();
【讨论】: