0

好吧,我有类似的代码可以防止键盘上的“全选”动作:

$(document).keydown(function(e){
   // CTRL key
   if ( e.which == '17' || e.which == '224' ){
      window.isCtrlHold = true;
   }
   // A key
   // Prevent from select all from a page ( ctrl + a )
   if ( e.which == '65' && window.isCtrlHold ){
     e.preventDefault();
   }
});

从另一个地方调用的另一个脚本逃脱了阻止预览代码:

$('input').focus(function(){
   window.inSearch = true;
});
$(document).keydown(function(e){
   // A ( "ctrl + a" if focus within text input )
   if ( e.which == '65' && window.isCtrlHold && window.inSearch ){
     // some code that do defult action eg "e.doDefault();"
   }
});

最后,我需要防止“ctrl+a”(全选)而焦点不在 input[type=text] 内,如果焦点在输入内,则允许全选。

4

1 回答 1

1

我认为您以错误的方式处理此问题,只需将您的第一个代码更新为这样

$(document).keydown(function(e){
   // CTRL key
   if ( e.which == '17' || e.which == '224' ){
      var isCtrlHold = true; //(note 1)
   }
   // A key
   // Prevent from select all from a page ( ctrl + a )
   if ( e.which == '65' && isCtrlHold && window.inSearch){
     e.preventDefault();
   }
});

注意&& window.inSearch.

现在您可以删除此代码块

$(document).keydown(function(e){
   // A ( "ctrl + a" if focus within text input )
   if ( e.which == '65' && window.isCtrlHold && ! window.inSearch ){
     // some code that do defult action eg "e.doDefault();"
   }
});

编辑:我注意到您的代码中有更多错误

注意1:isCtrlHold不应该是全局的,因为单击 Ctrl (不按住)将使其true永远(页面的生命)。尝试点击控制(不按住),然后尝试键入a.

注意2:您还应该添加如下内容:

$('input').blur(function(){
   window.inSearch = false;
});

否则你的脚本会一直认为 serachbox 是焦点,即使它不是。

注意3:没有“对立面” preventDefault();,您要么阻止默认行为,要么不阻止。

于 2012-07-19T08:20:19.830 回答