Остановить отправку новой строки? - PullRequest
5 голосов
/ 04 апреля 2011

У меня немного необычная проблема, связанная с формой.Мое веб-приложение прослушивает входные данные сканера от устройства считывания штрих-кода.Считыватель штрих-кода представлен в виде ввода с клавиатуры в следующем формате:

~100.0101~\n

, где \n - перевод строки.Я использую глобальный слушатель javascript с регулярным выражением - всякий раз, когда слушатель «слышит» ввод, который соответствует регулярному выражению, я вызываю мою функцию barcodeHandler().

К сожалению, это не очень хорошо взаимодействует с формами: если пользователь фокусируется на вводе формы при сканировании, форма отправляется и отправляется обратно до того, как слушатель запускает ее, потому что форма принимает \nозначать «представить».

Я не могу изменить вход сканера, поэтому есть ли способ остановить отправку форм при вводе \n?

Очевидно, я все еще хотел бы, чтобы мои формыработать с клавишей Enter, и я бы не стал менять поведение формы по умолчанию, если это возможно!

большое спасибо!

Ответы [ 2 ]

9 голосов
/ 04 апреля 2011

Вам нужно захватить нажатие клавиши на элементах управления формы и предотвратить действие по умолчанию, используя preventDefault() или return false.

// do this for all <input> <textarea> and <select> elements on the page.
input.addEventListener("keypress", function(event){
    if (event.which == '10' || event.which == '13') {
        event.preventDefault();
    }
}, false);

или используя jQuery:

$("input, textarea, select").keypress(function(event){
    if (event.which == '10' || event.which == '13') {
        event.preventDefault();
    }
});
3 голосов
/ 04 апреля 2011

Переопределите отправку формы и предоставьте свою собственную альтернативу в качестве обработчика щелчка на кнопке отправки.

<form action="submit.php" onsubmit="return false;">
    Some input ...<input type="text"/>
    <input type="button" value="Submit" onclick="parentNode.submit();">
</form>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...