我有一个接受整数的文本框,只要用户在字段中输入数字,我就需要它来运行一个使用文本框输入的函数。
这里的问题是keyUp()
将检测每个输入。因此,如果我输入23
,则会为2
触发一次,为3
触发一次。我只需要在输入完成时运行它。
有没有办法做到这一点,没有失去焦点,也没有使用计时器,每次使用setInterval
时都会检查文本框输入?
答案 0 :(得分:0)
看起来您希望在用户停止输入时收到通知。以下代码可用作起点,在用户停止输入后调用bufferedKeyUp 300 ms。 http://jsfiddle.net/mendesjuan/VTMEe/
$(function() {
// Creates a handler that will wait until the event hasn't fired for a period
// before it fires the actual event handler
function createBuffered(fun, delay) {
var timer;
return function() {
clearTimeout(timer);
var args = arguments;
var me = this;
timer = setTimeout(function() {
fun.apply(me, args);
}, delay);
}
}
$('#in').keyup( createBuffered(function(){
console.log('change');
}, 300));
});
Ext-JS有一个很简单的方法来执行此操作http://jsfiddle.net/mendesjuan/DYkmU/1/
Ext.get('myid').on('keyup', function() {
console.log('change');
}, null, {buffer: 300});
答案 1 :(得分:0)
为什么不在更改文本框内容之后测试文本框内容,在输入完成之后不是吗?
如果结果不合适,您可以随时清除并聚焦文本框,以便用户输入有效数据。
类似的东西:
$("textbox").change( function () {
if (someTestForGoodData) {
handleTheGoodData();
} else {
$(this).focus();
alert($(this) + " has bad data!");
}
})
答案 2 :(得分:0)
$('input').on('input propertychange', function() {
$('#output').html($(this).val().length + ' characters');
});
来自this回答。