Question

Je suis en train d'appeler une autre fonction jQuery confirmer si est vrai, voici le code:

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

    }

});

^^ le code ci-dessus ne fonctionne pas, mais vous verrez ce que je suis en train de le faire ..

Était-ce utile?

La solution

Vous devez empêcher l'action par défaut du navigateur sur le formulaire, ce qui est de le soumettre au serveur de la manière traditionnelle. Soit return false à la fin de votre gestionnaire soumettre, ou mettre e.preventDefault() au début:

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

Voir preventDefault :

  

Evite le navigateur d'exécuter   l'action par défaut. Utilisez la méthode   isDefaultPrevented savoir si   cette méthode n'a jamais été appelé (ce   objet de l'événement).

comme return false côté note a le même effet que preventDefault plus il arrête le barbotage de l'événement à des éléments parents. le mécanisme de jQuery pour la réalisation qui se trouve dans la méthode stopPropagation . En d'autres termes, return false = e.preventDefault + e.stopPropagation

Autres conseils

Vous n'êtes pas arrêter l'événement « normal » de se propager soumettre - essayez d'ajouter return false après la méthode de .validationEnginge() (alternativement le déplacer hors du bloc de 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 même

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;
});
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top