【问题标题】:jQuery submit function not working properlyjQuery提交功能无法正常工作
【发布时间】:2012-05-21 06:56:33
【问题描述】:

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

这里是工作环境

jQuery:1.7.2,铬(18.0.1025.168 m)。

有两个问题。

第一个:

我的代码是这样的

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 中不起作用。它总是触发表单。提交原因。

我很困惑呢。谁能解决,谢谢!

【问题讨论】:

  • 能否请您发布您的 IF 声明?
  • IF语句很简单没问题。就像 if(flag) 标志的值是一个布尔值。
  • 接受的答案是错误的。 return false 应该是 preventDefaultRead this如果你愿意,我可能会在这里写一个完整的答案。
  • 谢谢你,如果你在这里写一个完整的答案,我将不胜感激。

标签: jquery submit


【解决方案1】:

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

$('#test').submit(function(event){
      event.preventDefault();
});

【讨论】:

  • 我确实得到了相同的“共同回答者”here 的模糊反对票。好像有点奇怪。
  • 所以我想我不会说 iambriansreed 与其他人玩得不好,尽管事实上我比他早一分钟回答。
  • 实际上我对你的答案投了赞成票,我的答案在你之前提交。我只是为了清楚起见进行了编辑。
  • @VisioN。 (从其他线程继续......)这个答案作为公认的答案都是错误的。 return false 应该是 preventDefaultRead this
  • 关于downvote,您可能想阅读my answer下的cmets。
【解决方案2】:

替换:

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

与:

$('form#test').submit(function(event){    
      event.preventDefault();
});

【讨论】:

  • 有点奇怪,刚才不能用,现在可以了。
  • 阅读我对 OP 的评论。请阅读链接的答案。 (我刚来这里,所以我不知道为什么你被否决了,但无论如何它是错误的。)
【解决方案3】:

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

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

我认为这没有任何问题

DEMO

代码:

$('#test').submit(function(event) {
    if(jQuery('#textbox').val() == '') {
       alert('Not submitting');
       //event.preventDefault(); Not necessary but better
       return false;
    }
})

【讨论】:

  • 有些奇怪,我尝试onsubmit="validate()" 并且函数 validate 返回 false,但它总是触发 form.submit。但它现在工作得很好。谢谢。
  • 有时事情会发生,你永远无法知道为什么会发生 :) 很高兴看到你有解决方案
【解决方案4】:

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

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

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

可以这样做:

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

然后在代码中你可以做

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

但是,如果允许通过点击“enter”来提交表单,则必须小心,因为在这种情况下,点击处理程序的调用可能取决于浏览器和/或基于正在使用的库,请参阅中的 cmets onsubmit="return false" has no effect on Internet Explorer 7/8 (form is still submitted) Dirk Paessler 的回答了解更多信息。

但为了独立于浏览器,也可能会捕获“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 在幕后实际执行的操作,但您的冲突代码仍然可以使用它

【讨论】:

    猜你喜欢
    • 2015-02-12
    • 2017-08-05
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    相关资源
    最近更新 更多