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、すべてのキーに対してイベントを使用します。

次に、(Sean Hogan が行ったように) スライドショーを行う前に、イベントの対象を確認することをお勧めします。以下は、すべての主流のデスクトップ ブラウザーで機能します。

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 {
       ......
       }
   }

:focusjqueryにセレクターがあれば、これはさらに簡単になります。

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

しかし、それは現時点では単なる架空のコードです。

于 2010-01-30T04:29:20.400 に答える