键控和键控

Keyout and keyup

本文关键字:      更新时间:2023-09-26

我发现了一个非常适合我所有需求的need-JS函数。然而,它有一个小缺点。

函数在执行函数之前等待x毫秒(iKeyDelay),所有这些都绑定到一个键事件(keyup或keydown)。这一切都有效。

然而,当用户退出输入,使得输入失去焦点时,该功能将再次执行。应该防止这种额外的执行,因为这是不必要的。

我的JS技术不是很好,但也许你们中的一个人可以帮助我?

$.fn.DelayedKey = function(fn, iKeyDelay, sKeyEvent) {
   var iTimeoutId, 
   oEventData;
   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';
   }
   function fnExecCallback() {
      clearTimeout(iTimeoutId);
      fn.apply(this, arguments);
   }
   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;
};

全部修复!我更改了以下函数,它似乎纠正了您的问题。

function fnExecCallback(e) {
    if ( e.type != sKeyEvent )
        return;
    clearTimeout(iTimeoutId);
    fn.apply(this, arguments);
}

这是更新后的jsfiddle。

相关文章:
  • 没有找到相关文章