2010-04-11 91 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

相關問題