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}