Вызов другой функции jQuery, если confirm имеет значение true
Вопрос
Я пытаюсь вызвать другую функцию jQuery, если значение confirm равно true, вот код:
jQuery("#adminForm_1").submit(function () {
var empty = false;
jQuery(":input", "#adminForm_1").each(function () {
empty = (jQuery(this).val() == "") ? true : empty;
});
if (empty) {
if (confirm('You have not filled out all of the fields, do you wish to continue?')) {
jQuery("#adminForm_1").validationEngine({
ajaxSubmit: true,
ajaxSubmitFile: "/index.php?option=com_database&view=tripdetails&Itemid=12&client=1&task=save",
ajaxSubmitMessage: "Client Trip Details Saved",
inlineValidation: false,
success: false,
failure: function () {}
});
} else {
return false;
};
}
});
^^ приведенный выше код не работает, но вы увидите, что я пытаюсь сделать..
Решение
Вам необходимо предотвратить действие браузера по умолчанию над формой, которое заключается в отправке ее на сервер традиционным способом.Либо return false
в конце вашего обработчика отправки или поместите e.preventDefault()
в самом начале:
jQuery("#adminForm_1").submit(function (e) {
e.preventDefault();
...
или:
jQuery("#adminForm_1").submit(function () {
var empty = false;
jQuery(":input", "#adminForm_1").each(function () {
empty = (jQuery(this).val() == "") ? true : empty;
});
if (empty) {
if (confirm('You have not filled out all of the fields, do you wish to continue?')) {
...
});
}
}
return false;
});
Видишь preventDefault
:
Запрещает браузеру выполнять действие по умолчанию.Используйте метод isDefaultPrevented, чтобы узнать, вызывался ли этот метод когда-либо (для этого объекта события).
Как побочное примечание return false
оказывает тот же эффект, что и preventDefault
кроме того, это останавливает передачу события в родительские элементы.Механизм jQuery для достижения этого находится в Прекращение распространения способ.Другими словами, return false
= e.preventDefault + e.stopPropagation
Другие советы
Вы не останавливаете распространение "обычного" события отправки - попробуйте добавить return false
после того , как .validationEnginge()
способ (альтернативно, перемещение его из if
блок):
jQuery("#adminForm_1").submit(function () {
var empty = false;
jQuery(":input", "#adminForm_1").each(function () {
empty = (jQuery(this).val() == "") ? true : empty;
});
if (empty) {
if (confirm('You have not filled out all of the fields, do you wish to continue?')) {
jQuery("#adminForm_1").validationEngine({
ajaxSubmit: true,
ajaxSubmitFile: "/index.php?option=com_database&view=tripdetails&Itemid=12&client=1&task=save",
ajaxSubmitMessage: "Client Trip Details Saved",
inlineValidation: false,
success: false,
failure: function () {}
});
}
return false;
}
});
Или даже
jQuery("#adminForm_1").submit(function () {
var empty = false;
jQuery(":input", "#adminForm_1").each(function () {
empty = (jQuery(this).val() == "") ? true : empty;
});
if (empty) {
if (confirm( ... )) {
jQuery("#adminForm_1").validationEngine({ ... });
}
}
return false;
});