提交我的 Ajax.BeginForm 的其他 jQuery 事件

Posted

技术标签:

【中文标题】提交我的 Ajax.BeginForm 的其他 jQuery 事件【英文标题】:Additional jQuery events submitting my Ajax.BeginForm 【发布时间】:2010-09-20 21:16:42 【问题描述】:

我有一个 ASP.Net MVC Ajax.BeginForm,当我单击提交按钮时,它会正确提交和更新我的页面。

问题是我需要额外的事件来做同样的事情,比如当他们改变输入的文本时。附加事件确实正确提交了表单,但它们绕过了 Ajax.BeginForm 在表单标签上生成的 onsubmit javascript

这里是Ajax.BeingForm生成的表单标签:

<form action="/Store/UpdateCart" method="post" onsubmit="Sys.Mvc.AsyncForm.handleSubmit(this, new Sys.UI.DomEvent(event),  insertionMode: Sys.Mvc.InsertionMode.replace, updateTargetId: 'updatedContent' );"> 

这里是绑定我其他需要通过 Ajax 提交表单的事件的 jQuery:

 $("#ShippingType, #ViewCart .ddl").bind("change", function()  $("#ViewCartPage form").submit() );

关于如何让这些额外的事件像我需要的那样触发 onsubmit 有什么想法吗?

【问题讨论】:

【参考方案1】:

决定只使用常规表单,然后使用 jQuery.Form 插件,这在 2 秒内就起作用了!真希望我当初能走这条路。

var options = 
   target: '#updatedContent',   // target element(s) to be updated with server response 
   beforeSubmit: showRequest,  // pre-submit callback 
   success: showResponse  // post-submit callback 
        ;

$('#ViewCartPage form').ajaxForm(options);

我爱 jQuery

【讨论】:

.ajaxForm() 在 jQuery 中不再存在,或者从来没有。 阅读我的帖子 - ajaxForm 在我在帖子中提到的 jQuery.Form 插件中。 malsup.com/jquery/form 感谢您的反对!【参考方案2】:

微软可能会破坏我们,但是:

function SubmitMvcAjaxForm(formName) 
    eval('var event = new Object(); event.type="keypress"; ' + document.forms[formName].attributes["onsubmit"].value.replace('(this,', '(document.forms["' + formName + '"],'));

【讨论】:

【参考方案3】:

这是当前 MVC Beta 中的一个棘手问题。您不能使用“submit()”函数,因为它不会触发 onsubmit 处理程序。相反,您应该直接调用 onsubmit 处理程序。唯一的技巧是在调用它时需要将参数传递给 onsubmit()。这个参数就是处理程序中的“事件”参数(参见“新的 Sys.UI.DomEvent(event)”部分)。当您单击“提交”按钮时,MVC Ajax 脚本使用“event”参数取消默认行为,以便 Ajax 内容可以不间断地发生。

因此,如果您将代码更改为:

$("#ShippingType, #ViewCart .ddl").bind("change", function()  $("#ViewCartPage form").onsubmit( preventDefault: function()  ) );

onsubmit() 事件将在表单字段更改时触发。该代码创建了一个“假”事件对象,该对象实现了 preventDefault() 方法(这是 MVC Ajax 助手使用的唯一方法),因此您不会收到错误。

【讨论】:

这似乎只是完全停止表单提交,并且永远不会触发 AJAX 调用【参考方案4】:

改变 -

bind("change", function()  $("#ViewCartPage form").submit() );

到-

bind("change", function()  $("#ViewCartPage form").onsubmit() );

【讨论】:

这不起作用,因为 onsubmit 不是表单的函数或属性。【参考方案5】:

我在 MVC2 中使用了 Sichbo 的答案,但我发现使用 MVC3 您不再需要这些解决方法(即 $('#yourformid').submit(); 现在可以用于 ajax 调用)。

【讨论】:

以上是关于提交我的 Ajax.BeginForm 的其他 jQuery 事件的主要内容,如果未能解决你的问题,请参考以下文章

MVC小系列Html.BeginForm与Ajax.BeginForm

form表单和ajax表单提交(Html.BeginForm()Ajax.BeginForm())的差别

通过 ActionLink 提交 Ajax.BeginForm

Ajax.BeginForm()实现ajax无刷新提交

Asp.net Mvc Ajax.BeginForm提交表单

mvc Html.BeginForm和Ajax.BeginFrom表单提交