在下面的页面中,使用Firefox,删除按钮提交表单,但添加按钮不提交。

如何防止删除按钮提交表单?

function addItem() { var v = $('form :hidden:last').attr('name'); var n = /(.*)input/.exec(v); var newPrefix; if (n[1].length == 0) { newPrefix = '1'; } else { newPrefix = parseInt(n[1]) + 1; } var oldElem = $('form tr:last'); var newElem = oldElem.clone(true); var lastHidden = $('form :hidden:last'); lastHidden.val(newPrefix); var pat = '=\"' + n[1] + 'input'; newElem.html(newElem.html().replace(new RegExp(pat, 'g'), '=\"' + newPrefix + 'input')); newElem.appendTo('table'); $('form :hidden:last').val(''); } function removeItem() { var rows = $('form tr'); if (rows.length > 2) { rows[rows.length - 1].html(''); $('form :hidden:last').val(''); } else { alert('Cannot remove any more rows'); } } <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> <html> <body> <form autocomplete="off" method="post" action=""> <p>Title:<input type="text" /></p> <button onclick="addItem(); return false;">Add Item</button> <button onclick="removeItem(); return false;">Remove Last Item</button> <table> <th>Name</th> <tr> <td><input type="text" id="input1" name="input1" /></td> <td><input type="hidden" id="input2" name="input2" /></td> </tr> </table> <input id="submit" type="submit" name="submit" value="Submit"> </form> </body> </html>


当前回答

你使用的是HTML5按钮元素。请记住,原因是这个按钮有一个默认的提交行为,正如W3规范中所述: W3C HTML5按钮

所以你需要显式地指定它的类型:

<button type="button">Button</button>

以覆盖默认的提交类型。我只是想指出发生这种情况的原因。

其他回答

$(“形式”)。Submit (function(){返回false;}); 这将阻止按钮提交,或者你可以将按钮类型更改为"button" <input type="button"/>而不是<input type="submit"/> 只有当这个按钮不是表单中唯一的按钮时,它才会起作用。

下面的示例代码向您展示了如何防止单击按钮提交表单。

你可以试试我的示例代码:

 <form autocomplete="off" method="post" action="">
   <p>Title:
     <input type="text" />
   </p>
   <input type="button" onclick="addItem()" value="Add Item">
   <input type="button" onclick="removeItem()" value="Remove Last Item">
   <table>
     <th>Name</th>

     <tr>
       <td>
         <input type="text" id="input1" name="input1" />
       </td>
       <td>
         <input type="hidden" id="input2" name="input2" />
       </td>
     </tr>
   </table>
   <input id="submit" type="submit" name="submit" value="Submit">
 </form>
<script language="javascript">
function addItem() {
return false;
}

function removeItem() {
return false;
}
</script>

假设你的HTML表单有id="form_id"

<form id="form_id">
<!--your HTML code-->
</form>

将这个jQuery片段添加到您的代码中查看结果,

$("#form_id").submit(function(){
  return false;
});

你使用的是HTML5按钮元素。请记住,原因是这个按钮有一个默认的提交行为,正如W3规范中所述: W3C HTML5按钮

所以你需要显式地指定它的类型:

<button type="button">Button</button>

以覆盖默认的提交类型。我只是想指出发生这种情况的原因。

return false;

可以在函数的末尾或函数调用之后返回false。

只要它是最后发生的事情,表单就不会提交。