2013-03-26 4 views
2

Я хочу использовать несколько букв (ключей) в качестве ярлыка для некоторых действий в javascript. Я хочу проверить, ориентирован ли курсор на любое текстовое поле, ввод формы и т. Д., Чтобы действие ярлыка было отменено, когда пользователь вводит что-то в форме или текстовом поле.JS: Как определить, находится ли курсор в текстовом поле

Например, я хочу, чтобы предупреждение() выполнялось, когда пользователь нажимает «A». Но если пользователь вводит текст в текстовом поле, например «Веб-сайт», тогда он будет нажимать «A», на этот раз alert() не должен выполняться.

+1

Хотя это вполне возможно, я Propably бы попытаться использовать комбинацию клавиша вместо, например, 'CTRL + SHIFT + A' или аналогичный, который будет менее вероятным, вмешиваться в исходные данные в первую очередь, а также не будет переопределять горячие клавиши браузера по умолчанию. Если вы можете опубликовать [** код, который у вас есть в настоящее время **] (http://whathaveyoutried.com), я уверен, что мы сможем его исправить. – Nope

ответ

2
window.onkeydown = function(e){ 
    if (e.target.nodeName == 'INPUT') return; 

    handle_shortcut(); 
}; 
+2

Почему вы дважды тестируете «INPUT»? – Randrian

0

JQuery mouseover()

$('element').mouseover(function() { 
     alert('over'); 
}); 
+2

Я не уверен на 100%, но я думаю, что OP намерен узнать, находится ли «карет» в настоящее время в «input», что означает, что элемент управления в настоящее время имеет фокус. Вопрос сформулирован слабо, хотя. – Nope

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 
    }); 
} 
2

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'); 
}; 

Что вы можете сделать в дополнение к этому, это определить массив типов элементов без предупреждения, поэтому input, textarea и т. Д., А затем проверить, что ни один из этих элементов в настоящее время не является целью.

Демо: http://jsfiddle.net/7F3JH/

+1

+1 для JavaScript и примера jQuery. Хотя OP не помечен вопросом с jQuery, это может быть жизнеспособным решением для OP. – Nope

0

вам нужно сделать флаг в качестве глобального. и установите значение false, если в любом текстовом поле есть фокус.

var flag = true;

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


если (флаг) // клавиши быстрого доступа работает ...

0

Лучше использовать метод focusOut, определенный в JQuery. Согласно моему пониманию вы можете сделать что-то вроде этого

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

Надеется, что это помогает :)

+0

ОП не задал вопрос с помощью jQuery, поэтому ответ должен также содержать только решение JavaScript. – Nope

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

    // Do stuff 
} 
+0

Рассмотрите возможность добавления поддержки [datalist] (http://www.w3schools.com/tags/tag_datalist.asp). – zanetu

Смежные вопросы