9

javascriptのいくつかのアクションのショートカットとしていくつかの文字(キー)を使用したいと思います。ユーザーがフォームまたはテキストフィールドに何かを入力しているときにショートカットアクションがキャンセルされるように、カーソルがテキストフィールドやフォーム入力などにフォーカスされているかどうかを確認したいと思います。

たとえば、ユーザーが「A」を押したときにalert()を実行したいとします。ただし、ユーザーが「Webサイト」などのテキスト領域にテキストを入力している場合は、「A」を押すことになります。今回はalert()を実行しないでください。

4

7 に答える 7

13
$(document).keydown( function( e ) { 
  if( e.target.nodeName == "INPUT" || e.target.nodeName == "TEXTAREA" ) return;
  if( e.target.isContentEditable ) return;

  // Do stuff 
}
于 2013-05-04T13:38:30.877 に答える
6
window.onkeydown = function(e){
  if ( e.target.nodeName == 'INPUT' ) return;

  handle_shortcut();
};
于 2013-05-04T18:44:54.083 に答える
5

jQuery

$(window).bind('keydown',function(e){
    if(e.target.nodeName.toLowerCase() === 'input'){
        return;
    }
    alert('a');
});

または純粋なjs

window.onkeydown = function(e){
    if(e.target.nodeName.toLowerCase() === 'input'){
        return;
    }
    alert('a');
};

これに加えてできることは、アラート以外の要素タイプの配列を定義することです。たとえばinputtextareaなど、これらの要素のいずれも現在ターゲットではないことを確認します。

デモ: http: //jsfiddle.net/7F3JH/

于 2013-03-26T12:38:13.990 に答える
1

現在ページにフォーカスしている要素に応じて、ショートカットイベントをバインドおよびバインド解除できます。

JavaScript

window.onload = initWindow();

function initWindow () {
    attachShortcutHandler();

    var inputs = document.getElementsByTagName('input');
    for (var i = 0, max = inputs.length; i < max; i++) {
        inputs[i].onfocus = removeShortcutHandler;
        intputs[i].onblur = attachShortcutHandler;
    }
}

function removeShortcutHandler () {
    window.onkeypress = null;
}

function attachShortcutHandler() {
    window.onkeypress = function () {
        //your code here
    }
}

jQuery

$(function () {
    initShortcutHandler();

    $('input, [any other element you want]')
        .on('focus', function () {
            $('body').off('keypress');
        })
        .on('blur', function () {
            initShortcutHandler();
        });
});

function initShortcutHandler() {
    $('body').on('keypress', function () {
       //do your stuff
    });
}
于 2013-03-26T12:36:16.683 に答える
0

jQuery mouseover()

 $('element').mouseover(function() {
      alert('over');
 });
于 2013-03-26T12:36:15.940 に答える
0

グローバルとしてフラグを立てる必要があります。テキストボックスにフォーカスがある場合はfalseに設定します。

var flag = true;

$('input:type = "text")。focus(function(txt){flag = false;});


if(flag)//ショートカットキーは機能します...

于 2013-03-26T12:39:28.147 に答える
0

JQueryで定義されているfocusOutメソッドを使用することをお勧めします。私の理解によると、あなたはこのようなことをすることができます

$("input").focusout(function() {
  if($(this).val() == "A"{
   alert("your message");
   return false;
  }else{
    //do other processing here.
  }
});

お役に立てれば :)

于 2013-03-26T12:45:49.177 に答える