Frage

Korrigieren Sie mich, wenn ich falsch bin, aber ist es nicht möglich, eine Variable direkt nach dem Skript-Tag zu erklären, so dass es während dieses Skripts verwendet werden kann? Ich habe versucht, diese und meine Funktionen handeln, als ob es gar nicht da ist. Habe ich etwas falsch machen, oder ist dies geschehen soll. Ich würde es hassen alle meine Variablen für jede Funktion müssen neu deklarieren, wenn sie genau die gleiche Sache sind.

Tut mir leid, dass

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

Es funktioniert völlig in Ordnung, wenn die Vars sind in der Funktion, aber wenn sie so sind, gar nichts passiert.

War es hilfreich?

Lösung 2

Ich dachte eigentlich, wie es zu tun. Ich habe gerade gelesen über die globalen Variablen, und wie sie in einer Funktion zu erklären. Also habe ich alle setzen die Vars innerhalb der Funktion zurück, die „var“ auf sie gelöscht und es funktioniert jetzt perfekt.

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}

Andere Tipps

Das Problem ist, dass die Variablen (insbesondere eml, FNL, lnl) enthalten Werte erhalten, wenn sie deklariert sind. JS ist nicht die Länge von Strings oder die Werte der Elemente neu berechnet jedes Mal Ihre Funktion aufgerufen wird.

Wenn Sie diejenigen Vars innerhalb der Funktion zu bewegen, dann werden sie tatsächlich „neu berechnet“ jedes Mal, wenn die Funktion aufgerufen wird.

Was würde ich tun, ist es, die Vars verlassen, die DOM-Elemente außerhalb der Funktionen zugeordnet sind, sondern bewegen sich die Vars, dass get DOM-Elemente Werte / Längen innerhalb der Funktionen. Dann können Sie die Vars verweisen, die die DOM-Elemente enthalten.

Zum Beispiel (Teil-Code):

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.

Es ist besser, wenn Sie alle Ihre diesen Code innerhalb window.onload Ereignis wickeln. oder innerhalb $(function(){ }); bei jquery.

ich diese validate_form() Funktion gehe davon wird auf dem Klick auf eine beliebige Taste / Hyperlink aufgerufen werden.

wie folgt:

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(".");
};
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top