我正在解压缩从表单收集的一些数据并设置对象属性。如果输入是文本,我将存储该值。如果它是一个复选框,我正在存储"已检查"属性。如果它是收音机并且已经检查过,我正在存储该值。 这是我的代码:
for (var key in assessment_data) {
if(assessment_data.hasOwnProperty(key)){
var type = assessment_data[key].type;
var name = assessment_data[key].name;
var isThisChecked = assessment_data[key].checked;
if (type === "text") {
this[key] = assessment_data[key].value;
}
else if (type === "checkbox") {
this[key] = assessment_data[key].checked;
}
else if (type === "radio" && isThisChecked) {
this[name] = assessment_data[key].value;
}
}
}
我得到了一些属性的意外值,所以我在Firebug中逐步执行它,并发现最后else if
正在执行它不应该执行。例如,当type =" button"并且checked = false,最后else if
中的代码仍在执行。这一步是screenshot of firebug。您可以在条件中看到变量,在右侧看到它们的值。为什么要点这个代码?
编辑2: 我找到了问题的原因(其他地方的条件不好:if(this.height_type =" Length"))。 我还发现最后一个内部的代码并没有像我一样真正执行。 Firebug让它看起来像是在执行,我真的不明白为什么。黄色>这显示了当你单步执行时你在该if语句中的行停止,但代码实际上并没有运行。我能够在jsfiddle:http://jsfiddle.net/NDYR8/中重现这一点。我不明白为什么会这样做但是暂时我很开心。
assessment_date对象{value =" 05/01/2013" ,checked = false,type =" text" }
检查:假
名称:undefined
键入:" text"
价值:" 05/01/2013"
child_name对象{name =" child_name" ,checked = false,type =" text" }
检查:假
名称:" child_name"
键入:" text"
价值:""
dob Object {value =" 05/01/2009" ,checked = false,type =" text" }
检查:假
名称:undefined
键入:" text"
价值:" 05/01/2009"
女性对象{value ="女性" ,name ="性别" ,检查=假,更多...}
检查:假
姓名:"性别"
键入:" radio"
价值:"女性"
head_cm对象{checked = false,type =" text" ,value ="" }
检查:假
名称:undefined
键入:" text"
价值:""
head_in Object {checked = false,type =" text" ,value ="" }
检查:假
名称:undefined
键入:" text"
价值:""
head_unit_cm对象{value =" cm" ,name =" head_units" ,checked = false,更多......}
检查:假
名称:" head_units"
键入:" radio"
价值:" cm"
head_unit_in对象{value =" in" ,name =" head_units" ,checked = true,more ...}
检查:是的
名称:" head_units"
键入:" radio"
价值:"在"
height_cm对象{checked = false,type =" text" ,value ="" }
检查:假
名称:undefined
键入:" text"
价值:""
height_ft对象{value =" 42" ,checked = false,type =" text" }
检查:假
名称:undefined
键入:" text"
价值:" 42"
height_in Object {value =" 42" ,checked = false,type =" text" }
检查:假
名称:undefined
键入:" text"
价值:" 42"
height_type对象{value ="高度" ,name =" height_type" ,checked = true,更多......}
检查:是的
名称:" height_type"
键入:" radio"
价值:"高度"
height_unit_cm对象{value =" cm" ,name =" height_units" ,checked = false,更多......}
检查:假
名称:" height_units"
键入:" radio"
价值:" cm"
height_unit_ft_in对象{value =" ft_in" ,name =" height_units" ,checked = false,更多......}
检查:假
名称:" height_units"
键入:" radio"
值:" ft_in"
height_unit_in对象{value =" in" ,name =" height_units" ,checked = true,更多......}
检查:是的
名称:" height_units"
键入:" radio"
价值:"在"
length_type对象{value ="长度" ,name =" height_type" ,checked = false,更多......}
检查:假
名称:" height_type"
键入:" radio"
价值:"长度"
男性对象{value ="男性" ,name ="性别" ,checked = true,更多......}
检查:是的
姓名:"性别"
键入:" radio"
价值:"男性"
reload Object {value ="清除和\ n重新开始" ,checked = false,type =" button" }
检查:假
名称:undefined
键入:"按钮"
价值:"清除和\ n重新开始"
use_head_circ对象{value =" head_circumference" ,checked = false,type =" checkbox" }
检查:假
名称:undefined
键入:"复选框"
价值:" head_circumference"
use_height对象{value =" height" ,checked = true,type =" checkbox" }
检查:是的
名称:undefined
键入:"复选框"
价值:"身高"
use_weight对象{value =" weight" ,checked = true,type =" checkbox" }
检查:是的
名称:undefined
键入:"复选框"
价值:"体重"
weight_kg对象{checked = false,type =" text" ,value ="" }
检查:假
名称:undefined
键入:" text"
价值:""
weight_lb对象{value =" 47" ,checked = false,type =" text" }
检查:假
名称:undefined
键入:" text"
价值:" 47"
weight_oz对象{checked = false,type =" text" ,value ="" }
检查:假
名称:undefined
键入:" text"
价值:""
weight_unit_kg对象{value =" kg" ,name =" weight_units" ,checked = false,更多......}
检查:假
名称:" weight_units"
键入:" radio"
价值:" kg"
weight_unit_lb对象{value =" lb" ,name =" weight_units" ,checked = false,更多......}
检查:假
名称:" weight_units"
键入:" radio"
价值:" lb"
weight_unit_lb_oz对象{value =" lb_oz" ,name =" weight_units" ,checked = true,更多......}
检查:是的
名称:" weight_units"
键入:" radio"
价值:" lb_oz"
答案 0 :(得分:0)
我会用最后一个条件重试beeing isChecked === true ...
这似乎是因为JavaScript正在测试是否存在除false以外的值... 因此,如果未设置已选中(如果未选中则不是,因为它是没有设置值的属性,如果未选中则不存在),即使它为空,您仍然会输入其他内容。