如何调用阻止事件的默认行为?

时间:2012-07-19 08:15:49

标签: javascript jquery events

好吧,我有类似的代码阻止键盘“全部选择”操作:

$(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”(全选),而不是在输入[type = text]内,并且如果在输入中聚焦,则允许选择全部。

1 个答案:

答案 0 :(得分: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();没有“相反”,你可以阻止默认行为,也可以不这样做。