9

我想使用一些字母(键)作为 javascript 中某些操作的快捷方式。我想检查光标是否集中在任何文本字段、表单输入等上,以便在用户在表单或文本字段中输入内容时取消快捷操作。

例如,我希望在用户按下“A”时执行 alert()。但是如果用户在像'A website'这样的文本区域中输入一些文本,那么他将按下'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');
};

除此之外,您可以做的是定义一个非警报元素类型的数组,soinputtextarea,然后检查这些元素当前都不是目标。

演示: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

您需要将标志设为全局。并在任何文本框具有焦点时将其设置为 false。

变量标志=真;

$('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 回答
0

jQuery鼠标悬停()

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