捕获来自不同事件的提交事件

Catching submit events from different events

本文关键字:事件 提交      更新时间:2023-09-26

我有一个表单,它有一堆常规字段,基本上是一个子表单(尽管它没有另一个表单标记),它通过javascript设置隐藏字段。但是,如果你点击回车键提交子表单,它会提交更大的表单。我理解它为什么这么做,但这不是想要的行为。

有没有一种简单的方法可以用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()

您可以做的是,您可以有一个<input type="button" onclick="handle()"/>,而不是<input type="submit"/>,然后,在handle()函数中,您可以循环遍历包含子表单元素的div的子元素。<input type="submit"/>用于提交整个表单;它不知道你在一个子窗体中。此外,据我所知,HTML不允许没有黑客代码的嵌套表单标记。

我不认为你能够在不绕过规范的情况下完成你想做的事情,即嵌套表单,包括事件处理程序。我认为最好的做法是将它们放在div中,附加一个keydown处理程序,然后用childNodes 循环遍历表单元素

将按键事件处理程序附加到包装子窗体的div标记。在处理程序中,检查事件对象的键代码属性。如果是13,则用户按下回车键,然后您可以"提交"子表单。

div.addEventListener("keypress", function(event) {
    if (event.keyCode == 13) {
        event.preventDefault();
        // submit sub form
    }
});