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

StackOverflow https://stackoverflow.com//questions/10655710

Вопрос

У меня это работает при локальной настройке (с 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() вообще не выполняется, и форма просто отправляется.

Как мне заставить его работать на обеих версиях.Что я делаю не так?

Это было полезно?

Решение

Будьте ненавязчивы!

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top