我在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
,只传递最后一个属性值。
答案 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"));
});