Вызов другой функции jQuery, если confirm имеет значение true

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

  •  16-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь вызвать другую функцию 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;
});
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top