2016-06-20 17 views
0

Ich habe ein Array-Objekt und möchte es so, dass ich zusätzliche Benutzernamen und Kennwörter verschiedener Benutzer hinzufügen kann. Wenn der Benutzername oder das Passwort nicht existiert, wird es automatisch erstellt. Ich dachte, mein Array-Objekt würde wie folgt funktionieren: userinfo [0] [ "username"] ist user1, userinfo [1] [ "username"] ist benutzer2 usw. Hier wird die jsfiddle: https://jsfiddle.net/xkxn54bx/Hinzufügen neuer Werte zu Objekten

HTML:

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <link rel="stylesheet" href="style.css"> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0/jquery.min.js"></script> 
    <script src="test.js"></script> 
    <title>Generation X</title> 
</head> 
<body> 
    <form method="post"> 
    <label for="username">Username:</label><input type="text" name="user_name" id="username"><br /> 
    <label for="password">Password:</label><input type="password" name="pass-word" id="password"> 
    <input type="submit" id="submitbutton" value="Access"> 
    </form> 
</body> 
</html> 

JS:

var userInfo = [ 
    { username: "admin", password: "test" } 
]; 

function addUser(username, password) { 
    userInfo[userInfo.length + 1]["username"] = username; 
    userInfo[userInfo.length + 1]["password"] = password; 
} 

$(document).ready(function() { 
    $('#submitbutton').click(function() { 
     var username = $('#username').val(); 
     var password = $('#password').val(); 
     for (i = 0; i < userInfo.length; i++) { 
      if (username == '' || password == '') { 
       alert("All fields are required!"); 
      } 
      else if (username == userInfo[i]["username"]) { 
       if (password == userInfo[i]["password"]) { 
        alert("Welcome"); 
       } 
       else { 
        alert("You have entered an invalid password!"); 
       } 
      } 
      else { 
       addUser(username, password); 
       alert("Account created!"); 
      } 
     } 
    }); 
}); 

Antwort

1

ich bin mir nicht sicher, ob Sie das Array richtig zugreifen, wenn neue Objekte ihm hinzufügen. Es sollte wie sein:

function addUser(username, password) { 
    userInfo[userInfo.length - 1]["username"] = username; 
    userInfo[userInfo.length - 1]["password"] = password; 
} 

Seit Länge immer eine mehr als die letzten Index und das ist der Index, den Sie mit dem neuen Objekt auffüllen möchten. Wenn Sie stattdessen verwenden:

userInfo [userInfo.length + 1] ["Benutzername"] = Benutzername;

Dann überspringen Sie einen Index. Außerdem ist es eine gute Idee, ein Objekt an diesem Index zuerst zu erstellen:

function addUser(username, password) { 
    userInfo[userInfo.length]={}; 

    userInfo[userInfo.length - 1]["username"] = username; 
    userInfo[userInfo.length - 1]["password"] = password; 
} 
+0

Dank. Ich erhalte diese Nachricht: TypeError: userInfo [userInfo.length] ist nicht definiert –

+0

können Sie einen beliebigen Wert für userInfo in der Konsole sehen? Wie wäre es mit userInfo.length? – Sean12

+0

Ich habe die Länge in einer Variablen wie folgt definiert: var userLength = userInfo.length; –

Verwandte Themen