2010-12-05 11 views
1

Corrigez-moi si je me trompe, mais n'est-il pas possible de déclarer une variable juste après la balise de script, afin qu'elle puisse être utilisée tout au long de ce script? J'ai essayé cela, et mes fonctions agissent comme si ce n'était même pas là. Ai-je fait quelque chose de mal, ou est-ce censé se produire? Je détesterais avoir à redéclarer toutes mes variables pour chaque fonction si elles sont exactement la même chose.Comment déclarer des variables pour plusieurs fonctions

Désolé que

<script> 
    var na=document.getElementById('nr'); 
    var ea=document.getElementById('er'); 
    var em=document.subscribe.email; 
    var fn=document.subscribe.fname; 
    var ln=document.subscribe.lname; 
    var eml=document.subscribe.email.value.length; 
    var fnl=document.subscribe.fname.value.length; 
    var lnl=document.subscribe.lname.value.length; 
    var at=document.subscribe.email.value.indexOf("@"); 
    var per=document.subscribe.email.value.lastIndexOf("."); 

function validate_form() { 
    if((fnl<1 || lnl<1) && !eml<1){ 
     alert("Please enter your first and last name.") 
     if(fnl<1){fn.focus()}else{ln.focus()} 
     } 
    else if((fnl<1 || lnl<1) && eml<1){ 
     alert("Please fill in all fields.") 
     if(fnl<1){fn.focus()}else{ln.focus()} 
     } 
    else if(eml<1 || at<1 || per-at<2 || eml-per<2){ 
     alert("Please enter a valid email address") 
     em.focus() 
     }  
    else if (at>1 && per-at>2 && eml-per>2 && fnl>1 && lnl>1){return true} 
    vfn(); vln(); vem(); 
return false} 

Il fonctionne parfaitement bien quand les vars sont à l'intérieur de la fonction, mais quand ils sont comme ça, rien du tout se passe.

+0

Nous supposons sans le code, * toujours * poster le code :) –

+0

Code s'il vous plaît .... –

Répondre

1

En fait, je compris comment le faire. Je viens de lire sur les variables globales, et comment les déclarer dans une fonction. J'ai donc remis toutes les vars à l'intérieur de la fonction, effacé le "var" et cela fonctionne parfaitement maintenant.

function validate_form() { 
    na=document.getElementById('nr'); 
    ea=document.getElementById('er'); 
    em=document.subscribe.email; 
    fn=document.subscribe.fname; 
    ln=document.subscribe.lname; 
    eml=document.subscribe.email.value.length; 
    fnl=document.subscribe.fname.value.length; 
    lnl=document.subscribe.lname.value.length; 
    at=document.subscribe.email.value.indexOf("@"); 
    per=document.subscribe.email.value.lastIndexOf("."); 
    if((fnl<1 || lnl<1) && !eml<1){ 
     alert("Please enter your first and last name.") 
     if(fnl<1){fn.focus()}else{ln.focus()} 
     } 
    else if((fnl<1 || lnl<1) && eml<1){ 
     alert("Please fill in all fields.") 
     if(fnl<1){fn.focus()}else{ln.focus()} 
     } 
    else if(eml<1 || at<1 || per-at<2 || eml-per<2){ 
     alert("Please enter a valid email address") 
     em.focus() 
     }  
    else if (at>1 && per-at>2 && eml-per>2 && fnl>1 && lnl>1){return true} 
    vfn(); vln(); vem(); 
return false} 
0

Ce sera mieux si vous enveloppez tout votre code à l'intérieur de l'événement window.onload. ou à l'intérieur $(function(){ }); en cas de jquery.

Je suppose que validate_form() fonction sera appelée sur le clic de n'importe quel bouton/lien hypertexte.

comme suit:

var na = null; 
var ea = null; 
var em = null; 
var fn = null; 
var ln = null; 
var eml = null; 
var fnl = null; 
var lnl = null; 
var at = null; 
var per = null; 

window.onload = function() { 
    na = document.getElementById('nr'); 
    ea = document.getElementById('er'); 
    em = document.subscribe.email; 
    fn = document.subscribe.fname; 
    ln = document.subscribe.lname; 
    eml = document.subscribe.email.value.length; 
    fnl = document.subscribe.fname.value.length; 
    lnl = document.subscribe.lname.value.length; 
    at = document.subscribe.email.value.indexOf("@"); 
    per = document.subscribe.email.value.lastIndexOf("."); 
}; 
1

Le problème est que les variables (en particulier EML, fnl, LNL) contiennent des valeurs obtenues quand elles sont déclarées. JS ne recalcule pas la longueur des chaînes ou les valeurs des éléments chaque fois que votre fonction est appelée.

Lorsque vous déplacez ces variables à l'intérieur de la fonction, elles sont en fait "recalculées" à chaque appel de la fonction. Ce que je ferais est de laisser les vars auxquels sont assignés des éléments DOM en dehors des fonctions, mais de déplacer les vars qui contiennent les valeurs/longueurs des éléments DOM dans les fonctions. Vous pouvez ensuite référencer les vars contenant les éléments dom.

Par exemple (code partiel):

var na=document.getElementById('nr'), 
    ea=document.getElementById('er'), 
    em=document.subscribe.email, 
    fn=document.subscribe.fname, 
    ln=document.subscribe.lname;

function validate_form() { var eml=em.value.length, fnl=fn.value.length, lnl=ln.lname.value.length, at=em.value.indexOf("@"), per=em.value.lastIndexOf("."); // Rest of code.

Questions connexes