Jquery ajaxsubmit在第一次提交后发布一篇完整的文章

Jquery ajaxsubmit在第一次提交后发布一篇完整的文章,jquery,asp.net-mvc,ajax,jquery-plugins,Jquery,Asp.net Mvc,Ajax,Jquery Plugins,第一次提交按预期工作,但下一次完全发回。我正在使用jQuery.form插件,特别是.ajaxSubmit(options)调用来提交表单。有几个级别的包装器div,但是我调试了按钮。单击binds,我不明白为什么第二次,即使使用相同的变量,它也会完整发布,并且我的部分视图会返回到一个全新的页面上 这里,buttonid和screenid在两篇文章中都是相同的。我之所以指出这一点,是因为它们是根据命名约定计算的,比如外部(包装器)、(更新目标)和表单(要提交的表单) 以及我的MVC行动(如果相关

第一次提交按预期工作,但下一次完全发回。我正在使用jQuery.form插件,特别是
.ajaxSubmit(options)
调用来提交表单。有几个级别的包装器div,但是我调试了按钮。单击binds,我不明白为什么第二次,即使使用相同的变量,它也会完整发布,并且我的部分视图会返回到一个全新的页面上

这里,
buttonid
screenid
在两篇文章中都是相同的。我之所以指出这一点,是因为它们是根据命名约定计算的,比如
外部
(包装器)、
(更新目标)和
表单
(要提交的表单)

以及我的MVC行动(如果相关):

    public ActionResult AccountSetup(AccountSetupViewModel vm, string submitButton)
    {
        if (!ModelState.IsValid)
        {
            return PartialView(vm);
        }
        else
        {
            return Content(submitButton + ",AccountSetup");
        }
    }
编辑: 将此行插入my
$(function(){
)之后:

$('#AccountSetup').ajaxForm();

我能够停止完整的回发。在Firebug中,现在我看到ajax回发到
/CSR/Home/CSR?
,这就是所有这些内容的开始。这就像表单丢失了它的action属性。我的事件是否以某种方式交叉触发?

如果用部分视图替换成功回调中的原始表单,可能会发生这种情况

因此,当您删除一些HTML元素(如从服务器用部分视图替换现有HTML)时,它们的所有事件也将消失只是浏览器中的一些新HTML。它不会假设此新HTML是否与旧代码相关。这就是为什么如果希望新表单像以前一样工作,则必须重新添加所有功能和事件

如果是这种情况,表单将不再附加
submit
Ajax操作,因此第二次它将执行完整的post。为此,您需要在success函数中重新附加submit事件:

$(function() {
    ajaxifyForm();
});

function ajaxifyForm() {
    $('#AccountSetup').ajaxForm({
        target: '#AccountSetup',
        replaceTarget: false,
        success: stepCallWithForm
    });
}

function stepCallWithForm(result) {
    // If you replace the #AccountSetup form with the 
    // returned partial result you need to reattach the AJAX submit:
    ajaxifyForm();
}

您可以使用jQuery的live()事件绑定,而不是绑定到click事件,该绑定在AJAX加载后仍然有效

$('.formButton').click(function () {


我知道这是一个老问题,但我只想加上我的2美分

@Sohnee的答案会起作用:
live()
完成了这项工作。但是,它已经完成了。它应该被上的
替换:

$("#WrapperDiv").on({
      click:myFunction
   },"#formButton");    

我会添加额外的信息:“当你删除现有的HTML(你的表单)时,它的所有元素和它们的事件都会被删除。因此,当重新添加相同的HTML(基本上可以是任何内容)时,你也必须重新操作它(附加事件和类似内容)。”这将更好地解释为什么他必须重新连接事件。@Robert,说得好,请随意编辑我的帖子以包含这些有价值的信息。我应该指出,我在这个页面上有多个表单,类为
.CSRForm
,所以我应该使用Sohnee的解决方案吗?或者,我可以使用
$form
参数吗在.ajaxSubmit success回调中?我在最近的一篇文章中提到了这个参数,特别是我不确定它是如何使用的,但可能是新的形式。Sohnee的解决方案听起来更简单——好像我可以绑定一次就忘了它。我尝试了两种方法,
。live
绝对是最少的代码。谢谢!我很惊讶我是fir圣至+1。活的()岩石
$('.formButton').click(function () {
$('.formButton').live("click", function () {
$("#WrapperDiv").on({
      click:myFunction
   },"#formButton");