Domanda

Sto cercando di chiamare un'altra funzione jQuery se confermare è vero, ecco il codice:

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

    }

});

^^ il codice di cui sopra non funziona, ma vedrete quello che sto cercando di fare ..

È stato utile?

Soluzione

È necessario prevenire l'azione di default del browser sul modulo, che è quello di presentare al server in modo tradizionale. O return false alla fine del vostro gestore presentare, o mettere e.preventDefault() all'inizio:

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

o

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 :

  

impedisce al browser di esecuzione   l'azione predefinita. Utilizzare il metodo   isDefaultPrevented sapere se   questo metodo è stato mai chiamato (in quel   oggetto evento).

Per quanto come side-nota return false ha lo stesso effetto di preventDefault più si ferma il gorgogliare della manifestazione di elementi padre. Meccanismo di jQuery per realizzare che è nel stopPropagation metodo. In altre parole, return false = e.preventDefault + e.stopPropagation

Altri suggerimenti

Non sei fermare il "normale" presentare evento dalla moltiplicazione - provare ad aggiungere return false dopo il metodo .validationEnginge() (in alternativa si muove fuori del blocco 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;
    }
});

O anche

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;
});
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top