为什么有些Object值被传递而有些值没有?

时间:2017-06-12 04:01:32

标签: javascript

我在JavaScript中有以下代码,由于某种原因,它将this.id传递给validator()函数,但不会传递this.min_chars。 可能是什么问题?

$(document).ready(function(){
    var inputs = {
        'first_name' : {id:"fn_input", type: "text", placeholder: "Jane",name: "First Name", min_chars: 2},
        'last_name' : {id:"ln_input", type: "text", placeholder: "Doe", name: "Last Name", min_chars: 5}
    };
    for(field in inputs){
        var ni = document.createElement("input"); // new input
        add_attributes(ni,inputs[field].id,'',inputs[field].type);
        ni.placeholder = (inputs[field].placeholder) ? inputs[field].placeholder : '';
        document.getElementById("in_" + inputs[field].id).appendChild(ni);

        var ned = document.createElement("span"); //new error div
        add_attributes(ned,"err_" + inputs[field].id,"reg_error");
        document.getElementById("in_" + inputs[field].id).appendChild(ned);
        ni.addEventListener("keyup",function(e){validator(e,this.id,this.min_chars);});
    }
});
function add_attributes(element,idn,classn,type){
    if(idn) element.setAttribute('id', idn);    
    if(classn) element.setAttribute('class',classn);
    if(type) element.type = type;
}
function validator(e,id,min_chars){
    var input = document.getElementById(id).value;

    if(input.length < 2){
        document.getElementById("err_" + id).innerHTML = "Must be over "+min_chars+" chars";
    }
    else{

    }
}

修改 好的,this似乎是输入元素ni,因为它确实有id属性,所以它会被传递。并且由于它没有min_chars属性,因此它没有。现在的问题是,因为JS如何工作,如果我分配变量而不是this,只传递最后一个属性值。

1 个答案:

答案 0 :(得分:0)

因此元素对象没有min_char字段。它甚至没有min_chars属性。您可以使用setAttribute向标记添加属性,并使用getAttribute

进行检索
    var ni = document.createElement("input"); 
    ni.setAttribute("min_chars", 2);

[...]

   ni.addEventListener("keyup",function(e){
      console.log(this.getAttribute("min_chars"));
   });

jsfiddle