Голые кости Пример:
<form id="tForm">
<input type="submit" id="tSubmit" value="Submit">
</form>
<script>
$(document).on( 'click','#tSubmit', function(e) { someFunction(<fire-and-forget-action)});
</script>
Сценарий использования:
1.) Кнопка кликов пользователя Кнопка отправки
2.) someFunction() называется
3.) tForm представляется как поведение по умолчанию элемента ввода HTML типа = submit.
Я уверен, что вызов someFunction() произойдет до отправки tForm? Возникла проблема, связанная с тем, что существует вероятность того, что вызов someFunction() не будет завершен до отправки tForm и будет отображена новая страница.
Если функция fire-and-forget-action
является асикрасным запросом, тогда все ставки отключены.
Вам необходимо предотвратить preventDefault()
формы (вернуть значение false или вызвать preventDefault()
в аргументе события) и выполнить ее после завершения внутренней функции. Например, вы можете реорганизовать "огонь и забыть действие", но без большой информации о том, что он содержит, трудно помочь дальше.
Обратите внимание, что даже тогда у вас есть проблема, когда форма может быть представлена другими способами. Вы затеняете действие отправки отправить, но есть другие способы отправить форму. В идеале вы должны наблюдать за отправкой формы.
Вот небольшой абстрактный пример того, как вы должны это делать:
$('#theForm').submit(function(e) {
var f = this;
setTimeout(function() {
f.submit();
}, 1000);
return false;
});
setTimeout
в основном эквивалентен некоторому асинхронному запросу, происходящему вне исходного обработчика. Дело в том, что внутренняя функция знает об исходной форме и отправляет ее по завершении.