Pergunta

Eu estou tentando chamar uma outra função jQuery se confirmar é verdade, aqui está o código:

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;
        };

    }

});

^^ o código acima não trabalho, mas você vai ver o que eu estou tentando fazer ..

Foi útil?

Solução

Você precisa impedir a ação padrão do navegador no formulário, que é submetê-lo ao servidor da maneira tradicional. Ou return false no final do seu enviar manipulador, ou colocar e.preventDefault() no início:

jQuery("#adminForm_1").submit(function (e) {
    e.preventDefault();
    ...

ou

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 :

Impede que o navegador seja executado a ação padrão. Use o método isDefaultPrevented saber se este método já foi chamado (em que objeto de evento).

Como a nota lateral return false tem o mesmo efeito que preventDefault mais ele pára o borbulhar do evento para elementos pai. mecanismo de jQuery para alcançar o que há no stopPropagation método. Em outras palavras, return false = e.preventDefault + e.stopPropagation

Outras dicas

Você não está parando o "normal" enviar evento de propagação - tente adicionar return false após o método .validationEnginge() (alternativamente movê-lo para fora do bloco 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;
    }
});

Ou mesmo

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;
});
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top