Возникли проблемы при отправке формы и вызове событий в очереди после асинхронного события
У меня это работает на локальной настройке (с 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();
происходит событие и вызывается функция. Это на шаг ближе к следующему соглашению в том, что касается подобных событий.