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