在下面的页面中,使用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>


当前回答

返回false可以防止默认行为。但是返回false打破了其他单击事件的冒泡。这意味着在调用此函数后,如果有任何其他单击绑定,则其他的不考虑。

 <button id="btnSubmit" type="button">PostData</button>
 <Script> $("#btnSubmit").click(function(){
   // do stuff
   return false;
}); </Script>

或者你可以这样写

 <button type="submit" onclick="return false"> PostData</button>

其他回答

这是一个html5错误,你仍然可以将按钮作为提交(如果你想涵盖javascript和非javascript用户)使用它:

     <button type="submit" onclick="return false"> Register </button>

这样你将取消提交,但仍然做任何你在jquery或javascript函数中做的事情,并为没有javascript的用户提交。

我同意Shog9,尽管我可能会使用:

<input type = "button" onClick="addItem(); return false;" value="Add Item" />

根据w3schools, <button>标签在不同的浏览器上有不同的行为。

我现在不能测试这个,但我认为你可以使用jQuery的preventDefault方法。

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

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

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

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

函数removeItem实际上包含一个错误,它使表单按钮执行默认行为(提交表单)。在这种情况下,javascript错误控制台通常会给出一个指针。

查看javascript部分中的函数removeItem:

线:

rows[rows.length-1].html('');

是行不通的。试试这个吧:

rows.eq(rows.length-1).html('');