4

我有一个键监听器分配给箭头键来导航幻灯片。但是我想在用户在输入字段中输入时暂时禁用键监听器。我怎样才能做到这一点?我当前的代码如下所示:

//Listen to the keys
    function checkKey(e) {
    switch (e.keyCode) {
    case 37:
        changeImage('prev');
        break;
    case 39:
        changeImage('next');;
        break;
        }
    }
    if (jQuery.browser.mozilla) {
            jQuery(document).keypress (checkKey);
    } else {
            jQuery(document).keydown (checkKey);
    }
4

5 回答 5

2

首先,不需要浏览器检查。要检查箭头键,只需将keydown事件用于所有键。

其次,我建议(就像肖恩霍根所做的那样)在做幻灯片之前检查事件的目标。以下将适用于所有主流桌面浏览器:

document.body.onkeydown = function(evt) {
    evt = evt || window.event;
    var target = evt.target || evt.srcElement;
    var targetTagName = (target.nodeType == 1) ? target.nodeName.toUpperCase() : "";
    if ( !/INPUT|SELECT|TEXTAREA/.test(targetTagName) ) { 
        switch (evt.keyCode) {
            case 37:
                changeImage('prev');
                break;
            case 39:
                changeImage('next');
                break;
        }
    }
}
于 2010-01-30T11:30:54.573 回答
1

有点难看,但应该可以:

var moz = jQuery.browser.mozilla;
if (moz) {
    jQuery(document).keypress(checkKey);
} else {
    jQuery(document).keydown(checkKey);
}
jQuery("#myInput").focus(function() {
    if (moz) {
        jQuery(document).unbind("keypress");
    } else {
        jQuery(document).unbind("keydown");
    }
}).blur(function() {
    if (moz) {
        jQuery(document).keypress(checkKey);
    } else {
        jQuery(document).keydown(checkKey);
    }
});
于 2010-01-30T04:04:08.097 回答
1

如果焦点位于输入元素上,则该元素将成为键事件的目标。

所以你可以对 event.target.tagName 进行检查。

例如

function checkKey(e) {  
  switch (e.target.tagName) {  
    case "INPUT": case "SELECT": case "TEXTAREA": return;  
  }  
  // rest of your handler goes here ...  
}  
于 2010-01-30T06:52:34.117 回答
0

将 onfocus 和 onblur 事件添加到输入字段并设置全局变量值。在 checkKey 事件处理程序的开头检查该全局变量。

<input type="textbox" onfocus="window.inTextBox = true;" onblur="window.inTextBox = false;" />

function checkKey(e) {
 if (!window.inTextBox)
 {
  ...
 }
}
于 2010-01-30T04:10:06.773 回答
-1

我真的很喜欢 Ilya Volodin 建议的简单性,但我会在脚本中设置事件处理程序,而不是将其嵌入到 html 中:

  var textFocus = false; 

  $("textbox").focus(function() {
      textFocus = true;
   });

  $("textbox").blur(function() {
      textFocus = false;
   });

  function navKeys() {
       if (textFocus) {
            return false;
       } else {
       ......
       }
   }

:focus如果 jquery 有一个选择器,这会更简单。

      function navKeys() {
       if ($("textbox:focus") {
            return false;
       } else {
       ......
       }
   }

但这只是目前的假设代码。

于 2010-01-30T04:29:20.400 回答