【问题标题】:Additional jQuery events submitting my Ajax.BeginForm提交我的 Ajax.BeginForm 的其他 jQuery 事件
【发布时间】: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 有什么想法吗?

【问题讨论】:

    标签: jquery asp.net-mvc


    【解决方案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 调用)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-07-24
        • 1970-01-01
        • 2012-11-07
        • 2016-03-06
        • 1970-01-01
        • 2011-04-19
        • 1970-01-01
        相关资源
        最近更新 更多