了解自定义JQuery事件以及如何轻松修改它
Understanding custom JQuery event and how to modify it sligthly
我希望在输入时有一个稍微延迟(冷却)的输入上发生事件发射器,比如1秒,所以键入一个单词会多次触发它,但在最后一次按键后仅1秒
我发现这个代码
$.fn.changeOrDelayedKey = function(fn, iKeyDelay, sKeyEvent) {
var iTimeoutId,
oEventData;
// second signature used, update the variables
if (!$.isFunction(fn)) {
oEventData = arguments[0];
fn = arguments[1];
iKeyDelay = arguments[2];
sKeyEvent = arguments[3];
}
if (!iKeyDelay || 0 > iKeyDelay) {
iKeyDelay = 500;
}
if (!sKeyEvent || !this[sKeyEvent]) {
sKeyEvent = 'keydown';
}
// non-delayed event callback, should clear any timeouts, then
// call the original callback function
function fnExecCallback() {
clearTimeout(iTimeoutId);
fn.apply(this, arguments);
}
// delayed event callback, should call the non-delayed callback
// after a short interval
function fnDelayCallback() {
var that = this,
args = arguments;
clearTimeout(iTimeoutId);
iTimeoutId = setTimeout(function() {
fnExecCallback.apply(that, args);
}, iKeyDelay);
}
if (oEventData) {
this.change(oEventData, fnExecCallback);
this[sKeyEvent](oEventData, fnDelayCallback);
}
else {
this.change(fnExecCallback);
this[sKeyEvent](fnDelayCallback);
}
return this;
};
哪种方式会这样做,但它也会在change
上触发,这意味着如果我在5秒钟后没有移动焦点就写了一些东西,那么当我最终完成时,事件会再次触发,这是不应该的。所以我只希望事件发生在keyup
事件上。
如果有人能解释这个方法是如何工作的,以及我如何修改它以适应我的用例,那将非常感谢
如果我了解您的用法,您可以使用setTimeout()
和clearTimeout()
进行以下操作:
$(function() {
var timeOut = 0;
$("#test")
.keyup(function() {
// cancel looking, the user typed another character
clearTimeout(timeOut);
// set a timeout, when user doesn't type another key
// within half a second the function is called
timeOut = setTimeout(function() {
stopptedTyping();
}, 500); // change time as needed
});
});
function stopptedTyping(){
alert('user stopped typing');
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="test"/>
相关文章:
- 在Safari执行javascript之前对其进行修改
- 如何轻松地将服务器端变量从Java代码转移到客户端代码
- 从客户端获取修改后的对象,并将其与服务器上的原始对象组合
- 用Javascript修改内部标记的CSS规则
- 绑定Range输入以修改样式
- 可以从Chrome扩展修改窗口对象吗
- jQuery滚动器插件修改
- 将函数从onclick修改为onload
- jQuery UI自动完成-修改问题
- 有什么工具可以轻松读取javascript代码吗
- Javascript日期修改
- 如何通过JQuery修改样式属性
- 使用treewalker修改表
- Angularjs:修改js中的作用域,稍后在页面中使用
- “createImageData()”和“new ImageData(()”有何不同
- 在编译阶段后创建新的DOM树,或者继续使用原始修改的DOM
- 修改控制器AngularJS的全局值
- 修改数据后,setState不会触发重新渲染
- 通过sdk/system/events在修改请求观测器上测试http
- 了解自定义JQuery事件以及如何轻松修改它