1

我在本地设置(使用 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()根本不执行并且表单只是提交。

我如何使它在两个版本上都工作。我究竟做错了什么?

4

1 回答 1

1

不显眼!

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

我们在这里所做的是将函数订阅submit到表单的事件,在你给它一个 id 之后(我刚刚注意到你用作frmBanners示例)。Unobtrusive 意味着您没有在 HTML 中添加任何 Javascript,这是 jQuery 等库的主要目的。所以,在你的外部 Javascript 文件的任何地方,包括我上面提供的行。任何时候提交表单,而不仅仅是单击提交按钮时,都会调用该函数。

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

于 2012-05-18T15:46:44.490 回答