关于此问题,我有两个问题:

1-我执行if (nickname in localStorage)时有效吗?因为每次我运行代码都行不通。

2-我试图在多个页面中验证表单,但是每次我想保存一个昵称或其他昵称时,它都会保存另一个昵称。我尝试添加一个可计数的变量,但仍然无法正常工作。最好的方法是什么?

这是我三种形式中的两种形式的代码:

var k = 0;
function main() {
     var buttonregister = document.getElementById("next");
     var buttonlogin = document.getElementById("nextlogin");
     var buttonsignin = document.getElementById("nextsignin");

     if(buttonregister != null) {
         buttonregister.addEventListener("click", createaccount);
     } else if (buttonlogin != null) {
         buttonlogin.addEventListener("click", submit);
     }
}

function submit() {
    var login = document.login;
    var nickname = login.nickname.value;
    if (nickname in localStorage) {
        alert('The nickname ' + nickname + ' is already in use.');
    } else {
        localStorage.setItem("username"+k, nickname);
        localStorage.setItem("password"+k, "");
        localStorage.setItem("email"+k, "");
        k++;
    }

    login.reset();
}

function createaccount() {
    var register = document.register;
    var nickname = register.nickname.value;
    var password = register.password.value;
    var email = register.email.value;

    if (nickname in localStorage) {
        alert('The nickname ' + nickname + ' is already in use.')
    } else {
        localStorage.setItem("username"+k, nickname);
        localStorage.setItem("password"+k, password);
        localStorage.setItem("email"+k, email);
        k++;
    }

    register.reset();
}

document.addEventListener("DOMContentLoaded", function(event) {main()});

最佳答案

in运算符返回键,而不是值。因此,您要问localStorage是否包含等于nickname中存储的值的键。我认为这不是基于以下alert()的意图。


此外,您永远不会设置nickname localStorage属性,因此无论如何该测试都没有意义。


在这里,基于计数器的索引不一定是一种好的做法,因为不能保证顺序。有很多方法可以解决此问题。一种简单的方法是使用前缀,例如页面标题,表单名称或类似名称。

关于javascript - 在多个页面上具有localStorage的JavaScript表单,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50308324/

10-14 18:04