Отключить ввод ключа на странице, но НЕ в текстовом поле

Нашел это script:

function stopRKey(evt) {
  var evt = (evt) ? evt : ((event) ? event : null);
  var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
  if ((evt.keyCode == 13) && (node.type=="text"))  {return false;}
}

document.onkeypress = stopRKey;


Только проблема, он также останавливает ввод ключа, который используется в textarea. Это хлопот.

Я играл с использованием: onkeypress="return handleEnter(this, event)"

Но наши формы чрезвычайно сложны, и я ищу более чистый способ делать вещи.

Ответ 1

Вам нужно проверить nodeName или tagName цели события, например:

if (evt.keyCode == 13 && node.nodeName != "TEXTAREA") { return false; }

Я заметил, что после того, как было принято, что вы уже используете jQuery, вы можете просто заменить весь свой код выше:

$(document).keypress(function (e) {
  if(e.which == 13 && e.target.nodeName != "TEXTAREA") return false;
});

Ответ 2

Я думаю, вы можете просто изменить эту строку

if (evt.keyCode == 13 && node.type == "text") {
  return false;
}

to

if (evt.keyCode == 13 && node.type != "TEXTAREA") {
  return false;
}

Ответ 3

Если вы используете jquery (настоятельно рекомендуется), это автоматически добавит эту функцию, чтобы разрешить использование клавиши ввода:

$("textarea").focus(function () { 
     $(this).keypress(handleEnter);
});