我想在我停止在输入文本框中键入字符(而不是在键入字符时)后触发一个事件。
我尝试过:
$('input#username').keypress(function() {
var _this = $(this); // copy of this object for further usage
setTimeout(function() {
$.post('/ajax/fetch', {
type: 'username',
value: _this.val()
}, function(data) {
if(!data.success) {
// continue working
} else {
// throw an error
}
}, 'json');
}, 3000);
});
但是这个例子为每个输入的字符产生一个超时,如果我输入20个字符,我会收到大约20个AJAX请求。
在这个小提琴上,我用一个简单的警报而不是AJAX来演示同样的问题。
有解决办法吗,还是我只是用了一个糟糕的方法?
可以使用下划线.js“debounce”
$('input#username').keypress( _.debounce( function(){<your ajax call here>}, 500 ) );
这意味着您的函数调用将在按键500毫秒后执行。但是,如果在500毫秒之前按另一个键(触发另一个按键事件),则会忽略(取消)上一个函数执行,新函数将在新的500毫秒计时器后执行。
对于额外信息,使用u.debounce(func,timer,true)意味着将执行第一个函数,并且将忽略后续500毫秒计时器的所有其他按键事件。
解决方案:
这是解决办法。在用户停止键入指定时间后执行函数:
var delay = (function(){
var timer = 0;
return function(callback, ms){
clearTimeout (timer);
timer = setTimeout(callback, ms);
};
})();
用法
$('input').keyup(function() {
delay(function(){
alert('Hi, func called');
}, 1000 );
});
您必须使用设置超时
(就像您一样),但也要存储引用,以便可以继续重置限制。比如:
//
// $('#element').donetyping(callback[, timeout=1000])
// Fires callback when a user has finished typing. This is determined by the time elapsed
// since the last keystroke and timeout parameter or the blur event--whichever comes first.
// @callback: function to be called when even triggers
// @timeout: (default=1000) timeout, in ms, to to wait before triggering event if not
// caused by blur.
// Requires jQuery 1.7+
//
;(function($){
$.fn.extend({
donetyping: function(callback,timeout){
timeout = timeout || 1e3; // 1 second default timeout
var timeoutReference,
doneTyping = function(el){
if (!timeoutReference) return;
timeoutReference = null;
callback.call(el);
};
return this.each(function(i,el){
var $el = $(el);
// Chrome Fix (Use keyup over keypress to detect backspace)
// thank you @palerdot
$el.is(':input') && $el.on('keyup keypress paste',function(e){
// This catches the backspace button in chrome, but also prevents
// the event from triggering too preemptively. Without this line,
// using tab/shift+tab will make the focused element fire the callback.
if (e.type=='keyup' && e.keyCode!=8) return;
// Check if timeout has been set. If it has, "reset" the clock and
// start over again.
if (timeoutReference) clearTimeout(timeoutReference);
timeoutReference = setTimeout(function(){
// if we made it here, our timeout has elapsed. Fire the
// callback
doneTyping(el);
}, timeout);
}).on('blur',function(){
// If we can, fire the event since we're leaving the field
doneTyping(el);
});
});
}
});
})(jQuery);
$('#example').donetyping(function(){
$('#example-output').text('Event last fired @ ' + (new Date().toUTCString()));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type="text" id="example" />
<p id="example-output">Nothing yet</p>
我目前正在用Java编写一个程序,其中我需要从用户那里获得输入,这是一段文本。然而,我需要用户能够在一次输入文本的多个段落。当程序提示输入时,只需粘贴整段文本就可以实现这一点。我对输入使用扫描器,当我将多个段落粘贴到输入中时,无论何时打印存储文本的变量,都不会抛出错误,只输出第一节(在第一个换行符之前)。如何使用多个换行符存储整段文本,而不提示用户为每个文本块输入单独的输入? 我已经有了一些代码,
问题内容: 我有一个在更改textarea的值时调用的函数。它很好用,除非按下空格键,然后什么也没叫。有没有办法激活它?从技术上讲,内容在变化,我希望无论如何都要调用该函数。 我在代码上摆弄小提琴。您可以看到按下空格键时,数组不会推送新的元素(也请按Enter键),但是其他非空白键都可以。 小提琴示例:http : //jsfiddle.net/UJWLN/4/ 问题答案: 您可以在输入中使用指令
问题内容: 停止在JTextField中键入后如何启动函数。并非每个关键版本。如果两个键的释放时间差大于1秒,则它将运行此功能。否则,请等待1秒钟。 问题答案: 使用Swing 和a 每次更新时,重置 看看如何使用Swing计时器和侦听文档中的更改以了解更多详细信息 作为一个简单的例子…
我有一个HTML元素. 加载页面后,我可以使用从该元素获取文本。 但随后我点击这个元素并更改里面的文本(例如,改为“已编辑”)。DOM中没有任何变化,包括属性 的值(即仍然返回“initial”,并且DOM中的元素看起来像) 如何提取现在在浏览器中可见的值(即字符串“已编辑”)?我需要执行一些JavaScript或其他东西吗?
我试图找出如何使python停止接受输入后一定数量的时间。 到目前为止,我已经得到了工作,但不会停止程序,直到用户按下回车键。如果有关系,我在蟒蛇提示符中运行这个文件。 换句话说,我想做一些东西,这样Python就不会再等待输入了。如果用户在计时器结束前输入了任何东西,程序运行正常,这很好,除非玩家什么也没输入。如果他们甚至不按回车键,那么整个过程就会停止。(我也是Python的绝对初学者。事实上
null 所以我面临一个问题,如果打开,等待输入,如何停止它?我尝试过将它放在线程中并或使用作为标志,但它并没有停止