Я имел Jquery/HTML код, подобный этому:Форма представлен дважды, используя подать() на KeyUp
<form action="/SomeAction" method="post">
<input id="my-textbox" type="text" placeholder="Write something and press enter to continue..." />
</form>
<script type="text/javascript">
$(function() {
$('#my-textbox').keyup(function(e) {
var $textbox = $(this);
if ($textbox.val().length > 0 && e.keyCode == 13) {
$textbox.parent('form').submit();
}
});
});
</script>
Цель состояла в том, чтобы автоматически представить форму, когда пользователь нажал клавишу «Enter». Я регулярно использую Firefox, поэтому все было в порядке для меня, пока я не проверил в Google Chrome и Internet Explorer.
Когда я нажал клавишу Enter в более поздних браузерах, иногда я получал форму, представленную дважды. Это было легко заметить, потому что я получил бы дубликаты записей в моей БД, и я увижу два POST
с использованием Fiddler.
После некоторого тестирования я выяснил, что моя проблема была в коде jQuery, поскольку текстовое поле автоматически отправляется без ввода, и с помощью этого кода в некоторых браузерах будет произведено второе POST
.
Мои вопросы:
Почему не браузеры бойко предотвратить вторую форму пост (например, Firefox сделал в моем тестировании)?
Должен ли я ожидать такого поведения во всех основных браузерах на всех платформах?
Есть ли способ улучшить этот код, поэтому я выполняю отправку с использованием JavaScript, но не получаю форму, представленную дважды?
попытаться блокировании событие по умолчанию. – Christoph
У вас есть форма, представленная на клавиатуре. Вы запрашиваете, чтобы JavaScript передавал форму каждый раз, когда в текстовом поле происходит событие keyup. Вы получаете именно то, о чем просите. –
Я не эксперт по jQuery, но я бы привязал ваш код к событию отправки в форме (или зацепил функцию, блокирующую его поведение по умолчанию) – Eineki