提交我的 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