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

时间:2013-12-14 16:21:38

标签: javascript jquery html forms

我有一个包含一堆常规字段的表单,基本上是什么是子表单(尽管它没有另一个表单标记),它通过javascript设置隐藏字段。但是,如果您按Enter键提交子表单,则会提交较大的表单。我明白为什么会这样做,但这不是理想的行为。

是否有一种简单的方法可以在javascript中设置子表单,以便在提交(输入按钮,单击按钮等)时调用java事件处理程序?

我正在努力避免检查特定的按键事件。我更希望保留原生浏览器提交控件。

3 个答案:

答案 0 :(得分:1)

您正在使用jQuery标记,因此我将为您提供一个jQuery解决方案:

<form id="innerForm">
  <!-- Form Stuff -->
</form>

<script>
  $('#innerForm').submit( function(e) {
    // called when the submit button is pressed
  });
</script>

将提交提交处理程序但是提交表单。如果要停止刷新页面,请在处理程序中添加行e.preventDefault()

答案 1 :(得分:0)

你可以做的是,而不是拥有<input type="submit"/>,你可以拥有<input type="button" onclick="handle()"/>,然后,在你的handle()函数中,你可以循环遍历子元素div您拥有子表单元素。<input type="submit"/>旨在提交整个表单;它不知道你在子表格中。另外,据我所知,HTML不允许嵌套的表单标签而没有hackish代码。

我认为你不能做你想做的事情,这是嵌套的表单,包括事件处理程序,而不会绕过规范。我认为最好的办法是将它们放在div中,附加一个keydown处理程序,然后使用childNodes

循环遍历表单元素

答案 2 :(得分:0)

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

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