Возникли проблемы при отправке формы и вызове событий в очереди после асинхронного события

У меня это работает на локальной настройке (с jquery.1.6.4), но это не работает на настройке dev (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 ответ

Решение

Иди ненавязчиво!

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

То, что мы делаем здесь, подписывает функцию на submit событие формы, после того, как вы даете ему идентификатор (я только что заметил, что вы использовали frmBanners В качестве примера). Ненавязчивость означает, что вы не помещаете Javascript в свой HTML, что является основной целью таких библиотек, как jQuery. Поэтому в любом месте вашего внешнего файла Javascript добавьте строку, которую я предоставил выше. Функция будет вызываться каждый раз, когда отправляется форма, а не только при нажатии кнопки отправки.

Итак, когда вы звоните $("form#frmBanners").submit(); происходит событие и вызывается функция. Это на шаг ближе к следующему соглашению в том, что касается подобных событий.

Другие вопросы по тегам