0

indexedDB があり、ログイン機能に使用しています。ログイン時にユーザー情報をフォームに入力しようとしています。ただし、フォームにはユーザー情報の代わりに [object HTMLInputElement] が入力されます。

これは、ユーザー (db キー) を使用してオブジェクト (ユーザー) にアクセスする場所です。

EDITこれが実行されている私のサイトです: http://www3.carleton.ca/clubs/sissa/html5/admin.html 私のサイト エディターは、保存時にサイトを更新しているため、新しいものを試すとサイト スクリプトが変更される可能性があります。もの。

これは、ユーザー (db キー) を使用してオブジェクト (ユーザー) にアクセスする場所です。

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 ;}        
}

これは、[object 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;
}
4

1 に答える 1

1

1行だけ見てください:

fName.value = fName

valueのプロパティfNamefNameそれ自体に設定しています。

多数のグローバル変数を作成するのではなく、loggedUser直接 in で使用しpopulateFields()ます。

fName.value = loggedUser.fn;

編集:あなたのサイトを見ると、あなたが省略した重要な部分が見えます。 ページのリロードpopulateFields()に呼び出されています。そのため、ページがリロードされる前に作成された変数にはアクセスできませんpopulateFields()

宿題を手伝っているのだから、銀の大皿で答えを手渡すだけにはしたくない。秘訣は、ユーザー データがデータベースから取得され、populateFields()呼び出される前に、または関数内から利用できるようにする必要があることです。ユーザー オブジェクトをグローバル変数として使用できるようにすることもできますが、パラメーターとして渡す方がよい場合があります。

おそらく、フォームの送信もキャンセルしたいでしょう:

document.getElementById("loginForm").onsubmit = function (e) {
    e.preventDefault();
}

そして、の代わりにpopulateFields()から直接呼び出すだけです。loggedIn()getValues()

于 2013-03-21T06:19:47.923 に答える