【问题标题】:jQuery form submission. Stopping page refresh only works in newest browsersjQuery 表单提交。停止页面刷新仅适用于最新的浏览器
【发布时间】:2010-01-22 16:06:36
【问题描述】:

使用 jQuery 1.4 来做到这一点。

给body标签添加一个表单,表单本身没什么特别的:

$(function() {
$('body').prepend('<form name="frmSample" id="frmSample"><input class="btn" type="submit" value="SIGN UP" /></form>');
});

我正在使用以下方式提交表单:

$('#frmSample').live('submit', function() {
  var formdata = $(this).serialize();

   $.ajax({
       type: 'POST',
       url: 'http://www.example.com/Values.jsp',
       data: formdata,
       success:function() {
       submit_success();
       }
       });
  return false
  });

在最新的浏览器(Firefox 3.5、Safari 4)上可以正常工作。一旦我降到 FF 3.0 及以下或 IE 7 及以下,就会停止。

我现在有点卡住了。我一直在寻找很多东西,但只能找到任何提及除了 return false 或 event.preventDefault() 之外的东西。

所以看看我是否在这里遗漏了一些小东西,或者我的方向完全错误。

【问题讨论】:

  • 其他浏览器是否可能出现 Javascript 错误?这将导致其余的 JS 代码被忽略。

标签: jquery forms submit


【解决方案1】:

我会比 stopPopagation 更进一步:

$('#frmSample').live('submit', function(e) {  
    stopEvent(e);  
    ....etc...etc

以及 stopEvent 的代码:

function stopEvent(event) {
    event.preventDefault();
    event.stopPropagation();
    if ($.browser.msie) {
        event.originalEvent.keyCode = 0;
        event.originalEvent.cancelBubble = true;
        event.originalEvent.returnValue = false;
    }
}

从这里:http://www.openjs.com/articles/prevent_default_action/

returnValue 和 preventDefault() 方法

这正是我们所需要的——但我们不能依赖 return false 方法来阻止默认操作。提供此代码将退出函数 - 因此,如果函数中有更多工作要做,则无法使用此代码。在我遇到的大多数情况下,返回 false 就足够了,但在某些方面,我们需要更激烈的东西。

在谷歌中输入以下内容以获取更多信息:

防止默认停止传播 取消气泡

【讨论】:

  • 你在这个方面真的走了很远:)
  • 这看起来奏效了。非常感谢你。另外,感谢您指出更多需要在 Google 上研究的内容。
  • 刚刚遇到了这个问题。感谢 DM(询问)和 James(出色的回答)。
【解决方案2】:

试试

$('#frmSample').live('submit', function(e) {
  e.stopPropagation();
  var formdata = $(this).serialize();

   $.ajax({
       type: 'POST',
       url: 'http://www.example.com/Values.jsp',
       data: formdata,
       success:function() {
       submit_success();
       }
       });
  return false
  });

【讨论】:

  • 返回false通常是停止jQuery中大多数事件的坏方法,总是在函数参数中抓取事件并在其上调用stopPropagation()。
猜你喜欢
  • 1970-01-01
  • 2015-08-30
  • 2014-04-20
  • 2013-10-27
  • 1970-01-01
相关资源
最近更新 更多