2016-05-03 6 views
0

В JavaScript я хотел бы обнаружить некоторые нажатия клавиш. Но я хочу игнорировать те нажатия клавиш, которые пользователь делает, набирая какую-то область ввода текста. Как я могу это достичь?Обнаружение элементов ввода текста в javascript

Я попытался

if (document.activeElement.nodeName == 'INPUT') { 
    return; 
} 
if (document.activeElement.nodeName == 'TEXTAREA') { 
    return; 
} 

, который работает в этих двух элементов; но, например, элемент электронной почты, входящий в состав Inbox от Gmail, представляет собой контейнер DIV. Я хочу исключить все активных DIVs, правда? Существуют ли другие элементы HTML, которые используются для получения ввода ключа? Есть ли какой-либо другой метод, который я мог упустить?

+2

Вы должны проверить, является ли элемент 'contentEditable', а также. https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/contentEditable –

+1

https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/isContentEditable – Teemu

+0

@Teemu : Не знаю, существует ли 'isContentEditable': -o –

ответ

0

Прежде всего, я бы использовал jquery для нормализации ваших событий. Оттуда попробуйте провести тестирование $(event.target).is():

Вот пример, в котором есть div, где все события захватываются. События для <input> элементов игнорируются, а другие нет, в том числе событий для <textarea>:

$('#mydiv').keypress(function(event) { 
 
    if ($(event.target).is('input')) { 
 
    return true; 
 
    } else { 
 
    console.log('not an input box'); 
 
    return false; 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="mydiv"> 
 
    <input> 
 
    <span>Spanning area</span> 
 
    <textarea></textarea> 
 
</div>

+1

Есть ли преимущество использования jquery? Что он может сделать, что не может сделать код в моем вопросе? Кроме того, мой вопрос заключался в обнаружении других элементов, которые используют текстовые вводные данные, которые «input» и «textarea», к которым ваш ответ не относится (комментарии выше показали 'isContentEditable', чтобы решить это). – bers

+0

Есть (по крайней мере) два преимущества использования jquery. Во-первых, это намного более красноречиво, чем традиционный JavaScript, и намного более мощный. Во-вторых, и, возможно, более важно, если вы внимательно следите за документами jquery, вам не нужно беспокоиться (как много) о проблемах с кросс-браузером. События по-прежнему не выполняются последовательно в браузерах, а jquery выполняет большую работу по «нормализации» событий в один стандарт. К вашему второму вопросу: вы можете обнаружить элементы, отличные от ввода и textarea, просто объединив их в тесте утверждения if(). Я только захватил входные события для демонстрационных целей. –

+0

Спасибо за объяснение. Тем не менее, я чувствую, что вы не дочитали мой вопрос до конца :) Я знаю, как комбинировать 'if's, мне было интересно, с какими элементами HTML, чтобы рассмотреть с самого начала. – bers

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