2016-06-19 61 views
1

我新的web開發,並嘗試做一個登錄功能(用HTML,CSS和JS單獨),但它不會工作只是尚未:/JS確實在控制檯工作,但不是的onclick

<li> 
    <a id="myLink" href="#" onclick="MyFunction();"> 
     <i class="fa fa-user-plus" aria-hidden="true"></i> 
     &nbsp;Register 
    </a> 
    <script> 
     function MyFunction() { 
      var username = prompt("Please choose a username"); 
      var password = prompt("Please choose a password"); 
     } 
    </script> 
</li> 
<li> 
    <a id="myPw" href="#" onclick="MyPassword();"> 
     <i class="fa fa-unlock" aria-hidden="true"></i> 
     &nbsp;Login 
    </a> 
    <script> 
     function MyPassword() { 
      var verifyuser = prompt("Please enter your username") 
      var verifypw = prompt("Please enter your password") 
      if (verifyuser === username && verifypw === password) { 
       alert("You have been logged in!") 
      } 
     } 
    </script> 

所以基本上當我點擊「註冊」訪問者被提示選擇一個用戶名和密碼,然後他可以使用登錄,如果他點擊「登錄」 然而,如果我在註冊後進入Java控制檯並鍵入「用戶名「只是看看var」username「是否被記住我得到 Uncaught ReferenceError: username is not defined(…)

但是,當我不點擊「註冊」,只需在js控制檯手動鍵入js代碼它確實工作。所以我在控制檯(每行一個)輸入:

var username = prompt("Please choose a username"); //now I enter a username 
var password = prompt("Please choose a password"); //now I enter a pw 
username (now it displays what I just entered when I was prompted for username) 
password (now it displays what I just entered for password) 

有什麼問題是什麼想法?

回答

2

的JavaScript變量的作用域到他們正在申報功能,所以因爲var passwordvar usernameMyFunction裏面寫,這就是你可以訪問他們的唯一地方。

你想要做的是在全局範圍內聲明這些變量。要做到這一點,你可以用這樣的東西替換你的第一個腳本:

<script> 
    var username; 
    var password; 

    function MyFunction() { 
     username = prompt("Please choose a username"); 
     password = prompt("Please choose a password"); 
    } 
</script> 
+0

太棒了!這樣做的工作!那麼,在實際函數將它們聲明爲全局函數之前,var username和var password是否很重要? – Ympker

+0

函數內部的每個聲明(即'var variablename =「value」')只能在這個函數中訪問。如果你在任何函數之外聲明它,它就是全局的。 –

+0

假設'MyFunction'沒有調用相同的範圍(比如說,不是在頁面加載中,而是在onclick中) - 不一定**在**之前,但在「根」腳本中,不在任何範圍內。 –

相關問題