在异步事件之后提交表单和调用排队事件时遇到问题

时间:2012-05-18 15:43:02

标签: jquery preventdefault stoppropagation jquery-1.3

我有这个工作在本地设置(使用jquery.1.6.4),但它不能用于开发设置(jquery.1.3.2)。

考虑以下形式 -

<form onsubmit="return validateMacros();">
     <input id="formsubmitbutton" type="submit" name="formsubmitbutton" value="Submit" />
</form>

请注意上面的validateMacros();电话。

以下javascript -

jQuery(document).ready(function()
{

$("input#formsubmitbutton").click(preValidateUrls); 

        function preValidateUrls(evt)
        {
                evt.preventDefault(); //to prevent form submission until completion of async event

                $.ajax({
                    ...
                    ...
                    success: function(res)
                    {
                         $("form#frmBanners").submit();  //This submits the form in case of both versions but in 1.3.2 case, the validateMacros() function is not called
                    }
               });
       }

});

function validateMacros()
{
   //some logic here - which is not executing in case of jquery.1.3.2
}

当加载jquery.1.6.4时,函数validateMacros()在完成preValidateUrls()的执行后执行,这是期望的。

但是当加载jquery.1.3.2时,validateMacros()根本不执行,表单只是提交。

如何在两个版本上运行它。我做错了什么?

1 个答案:

答案 0 :(得分:1)

不引人注目!

$('form#frmBanners').on('submit', validateMacros);

我们在这里做的是订阅该函数到表单的submit事件后,给它一个id(我刚注意到你使用frmBanners作为一个例子)。 Unobstrusive意味着你没有在HTML中添加任何Javascript,这是jQuery等库的主要目的。因此,在外部Javascript文件中的任何位置,包括我在上面提供的行。只要单击提交按钮,只要表单提交,系统就会调用该函数。

因此,当您调用$("form#frmBanners").submit();时,将触发该事件并调用该函数。就发射这类事件而言,这更接近遵循惯例。