2014-07-16 5 views
0

Je dois appeler un script PHP en utilisant AJAX sur ma page (validation de formulaire). Je suis assez pratique avec PHP, mais pas très bien avec javascrip, jScript ou tout autre langage client, j'ai donc trouvé un script de démo gratuit qui répond à mes besoins et maintenant je joue avec ça juste pour voir si je peux apprendre quelque chose dans le processus. Une chose que je suis curieux de savoir si je peux fusionner deux fonctions en une seule.Fusionner deux fonctions dans jScript

Les fonctions ressemble fondamentalement ceci:

// When user changes something in the form 
$("#signup").change(function() 
{ 
    // ... validation code here 
} 

// When the form (page) first loads 
$("#signup").ready(function() 
{ 
    // ... validation code here 
} 

La première fonction valide la forme si quelque chose a changé.

Parfois, les utilisateurs soumettent le formulaire prématurément (en appuyant sur Entrée, par exemple) et dans ce cas, la validation ne se produit plus tant que l'utilisateur n'a pas modifié quelque chose dans le formulaire. J'utilise le résultat de la validation pour décider quelle classe appliquer aux éléments d'entrée (pour dire à l'utilisateur ce qui est fait et non) et je veux que cela reste (ou se produise immédiatement) si le formulaire est soumis sans être complet . Je sais que je peux appliquer une validation de formulaire que l'utilisateur ne soumettra pas tant que tous les champs requis ne seront pas remplis, mais supposons que ce n'est pas possible pour une raison inconnue ...

La deuxième fonction est juste une copie de la première et valide le formulaire dès que la page se charge. Celui-ci n'était pas à l'origine dans le script de démo, mais j'ai compris que je pouvais dupliquer la première fonction et changer le mot "change" en "ready" pour que mon formulaire soit validé comme je le voulais.

Maintenant, juste par curiosité, y a-t-il un moyen de fusionner ceux-ci en une seule fonction au lieu d'en avoir deux identiques? Quelque chose comme l'opérateur OR en PHP:

$("#signup").change(function() || $("#signup").ready(function() 
{ 
    // ... validation code here 
} 

Éditer: oui, je l'ai googlé à ce sujet. Mais sans succès, peut-être en raison de mon manque de connaissances javascript/jScript, je n'utilise pas les termes de recherche corrects ...

Répondre

1

Il n'y a rien de tel que ce que vous décrivez, mais cela vous donne le même effet.

var validate = function() { 
    // ... validation code here 
} 

$("#signup").change(validate); 
$("#signup").ready(validate); 

Vous pouvez créer une fonction, l'assigner à une variable, puis avoir une référence à cette fonction. Cette référence peut ensuite être transmise à tout ce qui nécessite une fonction en tant que paramètre - .change, .ready, setTimeout, setInterval, etc., etc.

+0

juste essayé et cela a fonctionné comme un charme. Le code semble beaucoup mieux maintenant sans le doublon! Merci :) –

0

Il existe des moyens d'y parvenir, mais puisque nous parlons de jQuery pour moi le plus succinct est immédiatement et sur le but de déclencher le gestionnaire d'événements change:

$("#signup").change(function() 
{ 
    // ... validation code here 
}).trigger('change'); // causes validation to run