2

我对 jQuery 提交功能有一些疑问。

这里是工作环境

jQuery:1.7.2,铬(18.0.1025.168 m)。

有2个问题。

第一个:

我的代码是这样的

html

<form id="test" action="..." method="post">
     <input type="text" />
     <input type="submit">
</form>

jQuery

$('#test').submit(function(){
      return false;
})

问题是它在 Firefox 和 Opera 中运行良好,但在 chrome 中运行良好。

第二:

html:如上。

jQuery:

$('#test').submit(function(){
      if(...)
         alert(something..);
      return false;
})

它在 firefox、opera 和 chrome 中不起作用。它总是触发 form.submit 为什么。

我很困惑呢。谁能弄清楚谢谢!

4

4 回答 4

11

不要使用return false;. 试试这个:

$('#test').submit(function(event){
      event.preventDefault();
});
于 2012-05-13T14:08:34.797 回答
4

代替:

$('#test').submit(function(){
      return false;
});

和:

$('form#test').submit(function(event){    
      event.preventDefault();
});
于 2012-05-13T14:08:47.673 回答
3

如果您只是不想提交页面,您可以简单地使用

onsubmit="return false"或者,如果您想要有条件的提交,也可以使用您拥有的代码。

我认为这没有任何问题

演示

代码:

$('#test').submit(function(event) {
    if(jQuery('#textbox').val() == '') {
       alert('Not submitting');
       //event.preventDefault(); Not necessary but better
       return false;
    }
})
于 2012-05-13T14:12:29.980 回答
1

这有时是 JS 库或自定义代码与提交处理程序的行为冲突的结果(例如,具有另一个显式提交表单的提交处理程序)。

理想的解决方案是调试并找到冲突的代码并解决它。

但是作为一种解决方法,可以更改为使用提交按钮上的单击处理程序,而不是表单上的提交处理程序。

可以做这样的事情:

    <input type="submit" id="btnSubmit">    

然后在代码中你可以做

$('#btnSubmit').click(function(){ //Actually we can do 'input[type="submit"]'
    return false;
})

但是,如果允许通过点击“enter”提交表单,则必须小心,因为在这种情况下,点击处理程序的调用可能取决于浏览器和/或基于正在使用的库,请参阅onsubmit="中的注释return false"对 Dirk Paessler 的答案中的Internet Explorer 7/8(仍提交表单)没有影响以获取更多信息。

但是为了独立于浏览器,也可能会捕获“enter”按键按钮,如下面的代码所示:

document.onkeypress = function(evt) {
   var evt = (evt) ? evt : ((event) ? event : null);
   var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
   if ((evt.keyCode == 13) && (node.type == "text")) { 
         /*return true or false here based on your logic*/;
   }
}

但是,人们也可以尝试此线程中的其他建议,例如直接调用 e.preventDefault() ,尽管这是 Jquery 在幕后实际所做的,但您的冲突代码仍然可以使用它

于 2013-04-22T22:00:16.763 回答