2010-12-05 1 views
1

Исправьте меня, если я ошибаюсь, но нельзя ли объявлять переменную сразу после тега скрипта, чтобы ее можно было использовать в этом скрипте? Я пробовал это, и мои функции действуют так, как будто его даже нет. Я сделал что-то не так, или это должно произойти. Мне бы очень хотелось, чтобы они обновляли все мои переменные для каждой функции, если они то же самое.Как объявить переменные для нескольких функций

К сожалению о том, что

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

Он работает прекрасно, когда вары находятся внутри функции, но, когда они, как это, вообще ничего не происходит.

+0

Мы догадываемся без кода, * всегда * размещаем код :) –

+0

Код пожалуйста .... –

ответ

1

я на самом деле понял, как это сделать. Я просто читал о глобальных переменных и как объявлять их внутри функции. Поэтому я положил все vars обратно внутри функции, стерли «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} 
0

Будет лучше, если вы обернете весь свой код внутри события window.onload. или внутри $(function(){ }); в случае jquery.

Я предполагаю, что функция validate_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("."); 
}; 
1

Вопрос заключается в том, что переменные (в частности, EML, фн, 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;

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.