У меня есть форма, которая содержит кучу регулярных полей и в основном то, что является подформой (хотя у нее нет другого тега формы), которая устанавливает скрытые поля через javascript. Однако, если вы нажмете enter, чтобы отправить подформу, она отправит более крупную форму. Я понимаю, почему он это делает, но это не желаемое поведение.
Есть ли простой способ настроить подформу в javascript, чтобы при ее отправке (кнопка ввода, нажатие кнопки и т.д.) Вызывается обработчик событий java?
Я стараюсь избегать проверки конкретных событий с нажатыми клавишами. Я бы предпочел сохранить собственные элементы управления представлением браузера.
Вы используете тег jQuery, поэтому я дам вам решение jQuery:
<form id="innerForm">
<!-- Form Stuff -->
</form>
<script>
$('#innerForm').submit( function(e) {
// called when the submit button is pressed
});
</script>
Обработчик отправки будет вызван, однако форма отправлена. Если вы хотите, чтобы страница не обновлялась, добавьте в e.preventDefault()
строку e.preventDefault()
.
Что бы вы могли сделать, вместо того, чтобы иметь <input type="submit"/>
, вы могли бы использовать <input type="button" onclick="handle()"/>
, а затем в вашей функции handle()
, вы можете прокручивать дочерние элементы div
которых есть элементы подформы. <input type="submit"/>
предназначен для отправки всей формы; он не знает, что вы находитесь в подчиненной форме. Кроме того, насколько я знаю, HTML не допускает вложенных тегов формы без хакерского кода.
Я не думаю, что вы сможете делать то, что хотите, вложенные формы, включая обработчик событий, не минуя спецификацию. Я думаю, что лучше всего просто положить их в div, прикрепить обработчик keydown, а затем childNodes
элементы формы с помощью childNodes
Прикрепите обработчик события нажатия клавиши к тегу DIV, который обертывает вашу подформу. В обработчике проверьте свойство ключа кода объекта события. Если это 13, тогда пользователь нажал клавишу ввода, а затем вы можете "отправить" подформу.
div.addEventListener("keypress", function(event) {
if (event.keyCode == 13) {
event.preventDefault();
// submit sub form
}
});