存储值生成[对象HTMLInputElement]

时间:2013-03-21 05:23:55

标签: javascript html5 object indexeddb

我有一个indexedDB并将其用于登录功能。我正在尝试在用户登录时使用用户信息填充表单。但是表单填充[object HTMLInputElement]而不是用户信息。

这是我让用户(db key)访问Object(用户)

的地方

EDITT这是我运行的网站:http://www3.carleton.ca/clubs/sissa/html5/admin.html 我保存时,我的站点编辑器正在更新它,因此在尝试新事物时可能会对站点脚本进行更改。

这是我让用户(db key)访问Object(用户)

的地方
function loginCheck(user,pass){    db.transaction("users").objectStore("users").get(user).onsuccess = function(event) {
    var loggedUser = event.target.result;
        if(!loggedUser){
            alert('Sorry, Username does not exist. Please try again.');
        }else if(pass !== loggedUser.pw ){
            alert('Incorrect log in combination. Please try again.');
            }else{loggedIn(loggedUser);}        
    }    
}
function loggedIn(loggedUser){
    var u=loggedUser;
    alert('Welcome '+u.fn+' '+u.ln+' to Macroplay');

    //function to populate fields 
    alert('get values called'); 
    getValues(u);

    //session store     
    var signedin = 'user';
    var username = u.userName;
    newLocal(signedin,username);
    alert('local storage set'); 
}

我使用此函数getValues来存储我想要的各种字段。

编辑:我将变量test声明为全局并存储用户名(fn)。警报显示正确的名称,但填充仍然未定义。

    var test;
function getValues(loggedUser){
    var u = loggedUser;
    alert('storing first name');
    test = u.fn;
    alert('First name = '+test);
    lName = u.ln; 
    users = u.userName;
    pass = u.pw;
    email = u.em;
    dob = u.dob;
    tel = u.tel;
    bio = u.bio;
    school = u.scl; 
    alert('user values stored');  
    if(u.gender == 'M'){
        gender[0].checked= true ;
    }else{gender[1].checked= true ;}        
}

这是我用来填充表格的函数[对象HTMLInputElement]

function populateFields(){
    alert('Name of populated field: '+test);
    fName.value = test;
    lName.value = lName;
    users.value = users;
    pass.value = pass;
    email.value = email;
    dob.value = dob;
    tel.value = tel; 
    bio.value = bio;
    terms.disabled = true;
    school.value = school;  
    alert('populate fields done');

    save.value = 'Update';
    signin.innerHTML = 'Log Out';
    registerLabel.innerHTML = 'Account Information';

     //open user info form
    var accountInfo = document.getElementsByTagName('details');
    accountInfo[1].open = open;
}

1 个答案:

答案 0 :(得分:1)

只看一行:

fName.value = fName

您将value的{​​{1}}属性设置为fName本身。

不要创建大量全局变量,只需在fName中直接使用loggedUser

populateFields()

修改your site,我看到了你遗漏的重要一点。在页面重新加载后,fName.value = loggedUser.fn; 被称为。因此, populateFields()无法访问在重新加载页面之前创建的任何变量

因为我正在帮你做作业,所以我不想把答案放在银盘上。诀窍是必须从数据库中检索用户数据,并在调用之前或从函数内部使用populateFields()。您可以使用户对象可用作全局变量,但最好将其作为参数传递。

您可能还想取消表单提交:

populateFields()

然后直接从document.getElementById("loginForm").onsubmit = function (e) { e.preventDefault(); } 而不是populateFields()致电loggedIn()