如何防止表单提交触发`按钮:first.onclick()`?

时间:2011-08-04 18:05:37

标签: javascript javascript-events

每次按输入提交表单时,相关表单中第一个click()上的<button>函数都会被触发。问题(除了我发现这种行为很奇怪的事实)是它实际上是一个click事件,与实际点击按钮无法区分。如果它在我的提交按钮上触发了偶数,我就可以了。

问题在于,在这种情况下,第一个按钮与实际表单无关,它实际上是一个隐藏的弹出窗口。

所以确切的问题:为什么会发生这种情况?我该如何预防呢?我如何区分这个“虚假点击”事件和真实事件?

(这是一个非常简单的例子;实际的代码是使用jQuery(如果jQuery碰巧承认这个并且有一个修复它),但实际问题与jQuery无关)

<form>
    <input>
    <button onclick="alert('button A click');">Button A</button>
    <button onclick="alert('button B click');">Button B</button>
    <input type="submit" value="Submit Button">
</form>

http://jsfiddle.net/NexHC/2/

请不要“移动按钮”的建议

2 个答案:

答案 0 :(得分:6)

-snip -

修改

<form>
    <input>
    <button type="button" onclick="alert('button A click');">Button A</button>
    <button type="button" onclick="alert('button A click');">Button B</button>
    <input type="submit" onclick="alert('button Submit click');" value="Submit Button">
</form>

实际上我把它拿回来...原因是比这更具体和简单。提交是w3c指定的<button>的默认类型。因此,通过在表单上保留按钮type属性为空,您正在制作三个提交按钮,当您点击输入时,它会选择第一个按钮(喜欢<kbd>样式本网站:P)。有关w3c信息,请参阅here;有关更新的小提琴,请参阅here

答案 1 :(得分:-1)

我的建议是,如果<button>与表单无关并且还控制隐藏弹出窗口,则将其从<form>的上下文中取出并放在其他位置。这也可以解决您的点击问题。