2010-02-17 5 views
3

J'utilise Position Absolute's jQuery validationEngine mais je dois l'enlever après l'avoir attaché à un formulaire.Supprimer JQuery validationEngine à partir du formulaire

J'ai 2 boutons de soumission sur mon formulaire - un pour enregistrer et un pour enregistrer comme brouillon.

J'attache l'attribut validationEngine au formulaire lorsque vous cliquez sur Enregistrer. Si la validation échoue et que l'utilisateur clique sur Enregistrer comme brouillon (en passant la validation), le moteur de validation est toujours attaché au formulaire à partir du moment où il a cliqué sur "enregistrer".

Ce que je veux faire est:

  • permettent à l'utilisateur de tenter de sauver
  • validation
  • échoue et l'erreur est affiché
  • et leur permettre de cliquer sur Enregistrer comme brouillon sans aucune validation en cours d'exécution

J'ai essayé la fonction unbind et elle semble fonctionner, mais elle casse complètement la soumission sur le bouton. Je veux juste supprimer la validationEngine et permettre à tout le reste de fonctionner tel qu'il était.

Merci

Répondre

2

J'ai ajouté une fonction au bas de la validation Fichier javascript du moteur:

disable : function(formobj) { 
    $(formobj).unbind("submit"); 
    $(formobj).die("submit"); 
    $(formobj).bind("submit", function() { 
     return true; 
    }); 
    $(formobj).live("submit", function() { 
     return true; 
    }); 
} 

Vous transmettez l'élément de formulaire jQuery. Vous pouvez, bien sûr, le faire en dehors du fichier javascript validationEngine, j'ai juste trouvé plus facile de tout regrouper :-)

Le bit important est que vous utilisez à la fois unbind et die.

+1

Merci - cela a fonctionné pour moi. J'ajouterais simplement qu'outre ajouter ce code au fichier js, vous devez changer l'événement click des boutons que vous ne voulez pas valider. C'est à dire. $ ('# btnBack%>'). click (function() { $ ('form'). validationEngine ('désactiver', $ ('formulaire')); }); – wdanda

2

Créer variable globale Validator

var globalValidator = null

Effectuez votre validateur logoc ----

reset Puis selon votre logique à l'aide

function clearValidatorErrors(){ 
    if(globalValidator != null){ 
     globalValidator.resetForm(); 
    } 
} 
+0

Où et Qu'aurais-je mis à globalValidator? – psynnott

+0

Définissez-le au moment du contrôle de validation .. comme ceci globalValidator = $ ("# formname").valider({}); - validation du formulaire en clair à l'aide de clearValidatorErrors(); fonction – Vicky

+0

Je ne comprends pas comment est-ce une solution au problème. C'est à dire. comment cela désactivera-t-il la validation en cliquant sur le bouton "Enregistrer en tant que brouillon"? – wdanda

1

Cette bibliothèque ne semble pas avoir de support pour la désolidarisation au moment de l'exécution (ce qui est assez médiocre si vous me demandez).

Voici le code qui lie le 'submit'.

$(this).bind("submit", function(caller){ // ON FORM SUBMIT, CONTROL AJAX FUNCTION IF SPECIFIED ON DOCUMENT READY 
    $.validationEngine.onSubmitValid = true; 
    $.validationEngine.settings = settings; 
    if($.validationEngine.submitValidation(this,settings) == false){ 
     if($.validationEngine.submitForm(this,settings) == true) {return false;} 
    }else{ 
     settings.failure && settings.failure(); 
     return false; 
    }  
}) 

Le problème est, si vous avez plus d'un gestionnaire d'événements soumettre attaché à cette forme, .unbind('submit') tueront tous les événements que vous aviez liés.

En supposant que l'événement a été le dernier à être lié, vous pourriez être en mesure de se déshabiller seul le dernier gestionnaire d'événement attaché à présenter:

var events = $("#myForm").data('events'); 
alert(events.submit.length); // should tell you how many events are bound.. 
events.submit.splice(events.submit.length - 1, 1); // strip the last event 
Questions connexes