2012-01-04 94 views
0

在asp.net mvc3应用程序中有一个表单。表单通过jquery发布。以下是相关的代码。ajax后触发两次

   $(this).find('form').live('submit', function() { 
        var request = $.post($(this).attr('action'), $(this).serialize(), function (data) { 
         //do something  
        }); 
        request.fail(function (jqXHR, textStatus) { 
         //do something  
        }); 
        return false; 
       }); 

现场()的使用,因为形式是通过AJAX加载,我不想绑定的每个窗体通过AJAX检索时间点击事件。

问题是点击提交原因表单将被发布两次。测试在铬和IE9中,发生在他们两个。

  • 我检查页面是否包含任何其他形式,但只有1个窗体。

  • 我禁用两个浏览器的所有分机(萤火虫可能会导致这样)

  • 有没有造成404(即图像)页面上的任何资源。

那么还有什么可能导致这个问题呢?

回答

0

很难说没有html标记,也许你有两个嵌套表单?

试着用event.stopPropagation或的preventDefault:

$(this).find('form').live('submit', function (e) { 
     e.stopPropagation(); 
     e.preventDefault(); 
     var request = $.post($(this).attr('action'), $(this).serialize(), function (data) { 
        }); 
     request.fail(function (jqXHR, textStatus) { 
         //do something  
     }); 
     return false; 
}); 
+0

kaz,我试过stopPropagation和preventDefault没有运气 – rovsen 2012-01-04 20:47:34

+0

那么:$(this).find('form')。unbind('submit')。live('submit',(...) – kaz 2012-01-04 21:22:19

1

我怀疑你是比南的形式,或提交按钮两次。有一个bookmarklet称为视觉事件(不是我的)。如果是这种情况,请在检查中运行。由于卡兹说,没有实际的HTML没有太多可以做

+1

它绑定你说过的两倍。讨厌的bug是好的预测:) – rovsen 2012-01-05 08:02:59

0

这是什么对我来说。我有一个阿贾克斯形式,我得到的唯一工作是:

$('#docForm').ajaxForm({ 

    ...Do Some Mildly Cool Stuff Code... 

}).submit(function (e) { 
    return false; 
}); //Just add the submit to the end. 

而这一切都花了。

希望它有帮助!