Jquery ajaxsubmit在第一次提交后发布一篇完整的文章
第一次提交按预期工作,但下一次完全发回。我正在使用jQuery.form插件,特别是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行动(如果相关
.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");