什么触发HTML表单提交?

Tom*_*Tom 13 html javascript forms jquery

我提前道歉是因为无法提供任何实际代码,因为问题出现在目前私密的页面中: - /请耐心等待我.

我有一个HTML表单.我将(专有)日历小部件附加到其中一个文本输入字段.当用户选中该字段时,将显示日历.在日历上有几个按钮(移动到上一个/下个月).当用户点击其中一个按钮时,日历会相应地更新自己,但是 - 表单也会提交!日历代码中没有任何东西可以触及除日历本身以及附加到的文本输入字段之外的任何内容,更不用说提交表单了!关于以下任何问题,我将不胜感激:

1)什么可能在这样的环境中提交表格?

2)除了点击提交按钮或点击回车键之外,通常提交表格的内容是什么?(特别是,普通按钮提交表格?在哪种情况下?)

3)作为一种解决方法,如果我没有设法解决这个问题,有没有办法简单地完全禁用提交表单(然后在附加到提交键的事件处理程序中重新启用它)?

注意:日历的行为通常不是这样 - 通常响应键事件并单击日期本身的事件(不是按钮).我在Firefox和Chrome上都试过这个并且得到了同样的行为.我尝试使用FireBug逐步跟踪click事件处理程序,一切看起来都很正常 - 但是提交表单的那一刻(并重新加载页面).该小部件使用jQuery 1.7.2.理解和/或解决这个问题的任何帮助将非常感谢!

Tom*_*Tom 24

很抱歉回答我自己的问题,但是没有一个给定的答案是完整的,即使我从他们和评论中学到了什么!感谢所有参与的人!

所以:

1 + 2)<button>元素定义的按钮会导致提交(就像它们已type="submit"设置一样.至少在某些浏览器中).如果想要一个按钮引起提交应该使用<button type="button">,或者是旧的<input type="button" />.

3)(现在对我来说不必要,但这是问题的一部分.)有很多方法可以阻止表单提交.其中三个是:

  • 处理onsubmit事件,防止提交(通过return false;或 - 最好是! - by e.preventDefault();)如果没有设置标志; 在处理应该实际提交表单的事件时设置标志

  • onsubmit如果触发事件的元素不是我们想要提交的元素(之一),则处理事件并阻止上述提交

  • 将表单操作设置为非操作,即action="#",并具有应该实际提交表单的事件的处理程序将操作设置为正确的地址

  • 感谢您的评论,@ Mark。return false;不是jQuery的东西。它也可以在普通的JavaScript中运行(也许不是跨浏览器?我不知道。我刚刚在Firefox上进行了尝试,并且至少在防止默认设置方面起作用了)。我写了`preventDefault()`是更可取的,因为确实`return false;`也阻止了传播(至少在jQuery中。我不确定纯JavaScript),这不一定是我们想要的。我们要防止默认。 (2认同)