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();"
   }
});

最後に、フォーカスが入力[type = text]内にない間は「ctrl + a」(すべてを選択)を防ぎ、入力内にフォーカスがある場合はすべてを選択できるようにする必要があります。

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: isCtrlHoldCtrl を (押したままにせずに) クリックすると永久に (ペ​​ーtrueジの寿命) になるため、グローバルにしないでください。コントロールをタップして (押したままにせず)、タイプしてみてくださいa

注 2: 次のようなものも追加する必要があります。

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

そうしないと、スクリプトは、検索ボックスがフォーカスされていなくても、常にフォーカスされていると見なします。

注3: の「反対」はありpreventDefault();ません。デフォルトの動作を防止するか、防止しないかのどちらかです。

于 2012-07-19T08:20:19.830 に答える