为什么我得到这个[object HTMLInputElement]?

时间:2019-04-14 10:24:04

标签: javascript html css

我正在尝试在页面加载时预先填写表单。回去一次会话后如何获取预填充数据?

//inside the validation code
    if (formOkay == false){
        document.getElementById("textform").innerText = "Check, There are some errors !";
    }else {
        document.getElementById("textform").innerText = "";
        var storage = window.sessionStorage;
        var firstName = document.getElementById("firstname").value;
        storage.setItem("First_name",firstName);
    }
    return formOkay;

//inside the function init
//Frist_name = the input name
//firstname = the input id

function init (){
    var formId = document.getElementById("myForm");
    formId.onsubmit = validatingForm;
    //getting the hob reference number using sessionStorage
    document.getElementById("job_number").value = sessionStorage.job_number;

    var storage = window.sessionStorage;
    if (sessionStorage.First_name != "undefined"){
        firstName = storage.getItem("First_name");
        document.getElementById("firstname").value = firstname;
    }else {
        alert("your webpage doesn't support webstorage");
    }

}
window.onload = init;

1 个答案:

答案 0 :(得分:0)

  

为什么我得到这个[object HTMLInputElement]?

因为JavaScript是区分大小写的,所以在这里:

document.getElementById("firstname").value = firstname;

...您正在使用通过为元素创建id "firstname"为元素创建的自动全局变量。要使用您的firstName变量,请确保大写N


其他一些注意事项:

  1. 您没有声明您的firstName变量,因此您的代码成为我所谓的The Horror of Implicit Globals的牺牲品。声明变量(使用varletconst)。

  2. 除非有人在上次访问中输入名称if (sessionStorage.First_name != "undefined"){,否则
  3. "undefined"将为true。要检查sessionStorage是否存储了First_name值,请与undefined进行比较:

    if (sessionStorage.First_name !== undefined){
    //                            ^^^^^^^^^^^^^
    

    或使用typeof

    if (typeof sessionStorage.First_name != "undefined"){
    //  ^^^^^^
    

    或使用getItem并检查null

    if (sessionStorage.getItem("First_name") !== null){
    

    有关MDNthe spec的更多信息。

  4. 在此代码中没有理由使用storage(或window):

    var storage = window.sessionStorage;
    var firstName = document.getElementById("firstname").value;
    storage.setItem("First_name",firstName);
    

    相反,只是:

    sessionStorage.setItem("First_name", document.getElementById("firstname").value);
    

    或使用分配,以反映您以后访问它的方式:

    sessionStorage.First_name = document.getElementById("firstname").value;
    

    (我个人更喜欢setItemgetItem,但这是一种样式选择。)

  5. 尽管您可以使用if (formOkay == false){,但惯用代码为if (!formOkay){