2010-04-11 84 views
1

此代码是我现在使用的。但是当我尝试使用数组来比较值时,它不起作用。 如果有人有任何想法,请回复。将数值与数组值进行比较的问题

<html> 
<head> 
    <script type-'text/javascript'> 

    function hovedFunksjon() 
    { 
    //alert("test av funksjon fungerte"); 
    //alert(passordLager); 
    window.open("index10.html","Window1","menubar=no,width=430,height=360,toolbar=no"); 
    } 

    function inArray(array, value) { 
    for (var i = 0; i < array.length; i++) { 
    if (array[i] == value) return true; 
     } 
     return false; 
     } 

    function spørOmPassord() 
    { 
    var passordLager = ["pass0","pass1","pass2"]; 

    window.passordInput = prompt("password");//Ved å bruke "window." skaper man en global variabel 

    //if (passordInput == passordLager[0] || passordLager[1] || passordLager[2]) 
    if (inArray(passordLager,passorInput)) 

     { 
     hovedFunksjon(); 
     } 
    else 
     { 
     alert("Feil passord"); 
     //href="javascript:self.close()">close window 
     } 
    } 
    function changeBackgroundColor() 
    { 
    //document.bgColor="#CC9900"; 
    //document.bgColor="YELLOW" 
    document.bgColor="BLACK" 
    } 
    </script> 
</head> 

<body> 
    <script type-'text/javascript'> 
    changeBackgroundColor(); 
    </script> 
    <div align="center"> 
    <form> 
    <input type = "button" value = "Logg inn" onclick="spørOmPassord()"> 
    </form> 
    </div> 
</body> 
</html> 
+0

我不明白你的意思。当你使用一个数组来比较什么? – 2010-04-11 14:41:07

+0

为什么你所有的函数/ var名称都是1个字母?让你很难理解你的代码。 – Samuel 2010-04-11 14:45:06

+1

你在你的代码中有一个错字,这可能是也可能不是你问题的原因:'inArray(passordLager,passorInput)' - 看起来应该是'passordInput'。 – 2010-04-11 14:47:02

回答

0

分配给window.passordInput但通过passordInput - 他们是不一样的。

如果你在FireFox中打开它,你可以通过工具 - >错误控制台查看脚本执行过程中产生的错误信息。

+1

实际上,'window'的属性可以作为全局变量访问,所以分配'window.passordInput'创建全局'passordInput'。碰巧,他的代码中有一个错字,他实际上传递了'passorInput',所以如果你错误地输入了自己,那么你的答案可能会有一点错误;-) – 2010-04-11 14:48:55

+1

实际上,在这种情况下'window.passordInput'和'passordInput'是与当前范围内没有'passordInput'相同。 – Gumbo 2010-04-11 14:49:48

3
if (array[i] == value) return true; 
    } 
    return false; 
    } 

这是真的误导压痕那里!

window.passordInput = prompt("password"); 

我不知道你为什么使用全局来存储输入,因为你只在本地函数中使用它。 (如果你确实需要一个全球性的,你不需要window.前缀,因为你还没有宣布,与当地var变量反正。)

这可能是你的问题,但:prompt不再可用在IE7 +。微软已经停止了它的工作,因为(非常可疑的)安全原因。你可能需要拿出涉及表单域的另一种方法,如:

<input id="password" type="password"/> 
<input id="login" type="button" value="Login"/> 

<script type="text/javascript"> 
    document.getElementById('login').onclick= function() { 
     var password= document.getElementById('password').value; 
     if (['pass0', 'pass1', 'pass2'].indexOf(password)!==-1) { 
      window.open('thing.html', '_blank'); 
     } else { 
      alert('no.'); 
     } 
    }; 
</script> 

我使用Array#indexOf这里做在列表测试。这是新版JavaScript中的标准方法,但并非所有浏览器都支持它。你可以将其添加到不这样做,这样的浏览器:

// Add ECMA262-5 Array indexOf if not supported natively 
// 
if (!('indexOf' in Array.prototype)) { 
    Array.prototype.indexOf= function(find, from /*opt*/) { 
     for (var i= from || 0, n= this.length; i<n; i++) 
      if (i in this && this[i]===find) 
       return i; 
     return -1; 
    }; 
} 

无论哪种方式,要知道,JavaScript的密码“保护”不仅是可怕的可访问性,但也完全不安全。你不应该把它用在你关心的任何事情上。如果要正确执行此操作,请查找真正的HTTP基本身份验证(htaccess)和/或基于cookie的表单登录。

+0

+1。我不认为IE7完全阻止'提示符'。 IE7 +(讽刺地)提示你允许或拒绝脚本化的窗口。即使如此,'提示'也是非常古老的,现代的JS对话替换要好得多。 – 2010-04-11 15:00:45

+0

是的,它仍然存在,但是你必须跳过去激活它的障碍足以让它在实践中无法使用,特别是IE在第一次调用时默默地弄乱脚本。 – bobince 2010-04-11 18:15:27

1

你刚才忘了dpassorInput

inArray(passordLager,passordInput) 
+0

+1 - 我认为这是这里的实际问题。 – 2010-04-11 15:13:28

+0

那是谢谢:) – 2010-04-11 17:16:41

相关问题