Javascript 如何为多个函数声明变量

Javascript 如何为多个函数声明变量,javascript,function,variables,declare,Javascript,Function,Variables,Declare,如果我错了,请纠正我的错误,但是不可能在脚本标记之后声明一个变量,以便在整个脚本中使用它吗?我试过了,我的函数就好像根本不存在一样。是我做错了什么,还是这应该发生。如果每个函数的变量是完全相同的,我不想重新声明它们 对不起 <script> var na=document.getElementById('nr'); var ea=document.getElementById('er'); var em=document.subscribe.email; var fn

如果我错了,请纠正我的错误,但是不可能在脚本标记之后声明一个变量,以便在整个脚本中使用它吗?我试过了,我的函数就好像根本不存在一样。是我做错了什么,还是这应该发生。如果每个函数的变量是完全相同的,我不想重新声明它们

对不起

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

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(“.”);
函数validate_form(){

如果((fnl在jquery中,最好将所有this代码包装在
窗口.onload
事件.或
$(function(){});

我假设单击任何按钮/超链接都会调用
validate\u form()
函数

例如:

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(".");
};

问题是变量(特别是eml、fnl、lnl)包含声明时获得的值。JS不会在每次调用函数时重新计算字符串长度或元素值

当您在函数中移动这些变量时,它们实际上会在每次调用函数时“重新计算”

我要做的是将分配DOM元素的变量留在函数之外,但将获取DOM元素值/长度的变量移动到函数内部。然后您可以引用包含DOM元素的变量

例如(部分代码):
var na=document.getElementById('nr'),
ea=document.getElementById('er'),
em=document.subscribe.email,
fn=document.subscribe.fname,
ln=document.subscribe.lname

函数validate_form(){ var eml=em.value.length, fnl=fn.value.length, lnl=ln.lname.value.length, at=em.value.indexOf(“@”), per=em.value.lastIndexOf(“.”); //代码的其余部分。

我实际上知道了怎么做。我刚刚读到了全局变量,以及如何在函数中声明它们。所以我把所有变量都放回函数中,删除了函数上的“var”,现在它工作得很好

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}
函数验证\u表单(){
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(“.”);

如果((我们在猜测时没有代码,请始终发布代码:)
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}