Первое, что мне пришло в голову, это stopPropagation
в полях input
и textarea
, тогда preventDefault
не должен запускаться на document
.
JQuery.псевдокод:
$('input, textarea').keypress(e, function(e){e.stopPropagation();});
$(document).keypress(e, function(e){if(delete) e.preventDefault();});
Другой возможностью является проверка целевого объекта по ключевому событию документа.
Обратный вызов события:
var originalElement = e.srcElement || e.originalTarget;
if(orignalElement.tagName === 'INPUT' or orignalElement.tagName === 'TEXTAREA'){ return; }
// else do your delete key stuff
Первая строка должнаустареть, если вы используете jQuery, потому что это нормализовало событие для вас, и вы можете использовать e.target
, чтобы получить originalTarget