我正在解压缩从表单收集的一些数据并设置对象属性。如果输入是文本,我将存储该值。如果它是一个复选框,我将存储“选中”属性。如果它是一台收音机并且已被检查,我将存储该值。这是我的代码:
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
仍在执行。这是该步骤的萤火虫屏幕截图。您可以在右侧看到条件中的变量及其值。为什么会碰到这个代码?
编辑:我将问题中的变量名称更改为更清晰,并发布了一个新的屏幕截图,显示了 Firebug 中的代码匹配。此外,这是assessment_data 对象的内容:
编辑 2:我找到了问题的原因(其他地方的条件不好: if(this.height_type = "Length") )。我还发现最后一个 else 中的代码并没有像我一样真正执行。Firebug 让它看起来像是在执行,我真的不明白为什么。黄色 > 显示您在单步执行时所在的行,它在 if 语句中的行处停止,但代码实际上并未运行。我能够在 jsfiddle 中重现这一点:http: //jsfiddle.net/NDYR8/。我不明白为什么会这样,但目前我很高兴。
评估日期对象{值=“05/01/2013”,检查=假,类型=“文本”}检查:错误
名称:未定义
类型:“文本”
值:“05/01/2013”
child_name Object { name= "child_name" , checked= false , type= "text" }
检查: false
name: "child_name"
type: "text"
value: ""
dob 对象 { value= "05/01/2009" , checked= false , type= "text" }
检查: false
名称: undefined
type: "text"
value: "05/01/2009"
女性对象{值=“女性”,名称=“性别”,检查=假,更多...}
检查:假
名称:“性别”
类型:“无线电”
值:“女性”
head_cm 对象 { 已检查 = false ,类型 =“文本”,值 =“” }
检查:错误
名称:未定义
类型:“文本”
值:“”
head_in 对象 { 已检查 = false ,类型 =“文本”,值 =“” }
检查:错误
名称:未定义
类型:“文本”
值:“”
head_unit_cm 对象 { value= "cm" , name= "head_units" , checked= false , more...} 检查: false
name: "head_units"
type: "radio"
value: "cm"
head_unit_in 对象 { value= "in" , name= "head_units" , checked= true , more...}
检查: true
name: "head_units"
type: "radio"
value: "in"
height_cm Object { checked= false , type= "text" , value= "" } 检查: false
name: undefined
type: "text"
value: ""
height_ft 对象 { value= "42" ,checked= false , type= "text" } 检查:false
name: undefined
type: "text"
value: "42"
height_in Object { value="42" , checked= false , type= "text" } 检查: false
名称: undefined
type: "text"
value: "42"
height_type 对象 { value= "Height" , name= "height_type" , checked= true , more...} 检查: true
name: "height_type"
type: "radio"
value: "Height"
height_unit_cm 对象 { value= "cm" , name= "height_units" , checked= false , more...} 检查: false
name: "height_units"
type: "radio"
value: "cm"
height_unit_ft_in 对象 { value= "ft_in" ,name= "height_units" ,checked= false ,更多...} 检查:false
名称:"height_units"
类型:"radio"
值:"ft_in"
height_unit_in 对象 { value= "in" , name= "height_units" , checked= true , more...} 检查:true
name: "height_units"
type: "radio"
value: "in"
长度类型对象{值=“长度”,名称=“高度类型”,检查=假,更多...}检查:假
名称:“高度类型”
类型:“无线电”
值:“长度”
男性对象 { value= "male" , name= "gender" , checked= true , more...} 检查:true
name: "gender"
type: "radio"
value: "male"
重新加载对象 { 值 =“清除和\n重新开始”,检查=假,类型=“按钮”}检查:假
名称:未定义
类型:“按钮”
值:“清除和\n重新开始”
use_head_circ 对象 { value= "head_circumference" ,checked= false , type= "checkbox" } 检查:false
名称:未定义
类型:"checkbox"
值:"head_circumference"
use_height Object { value= "height" , checked= true , type= "checkbox" } 检查:true
name: undefined
type: "checkbox"
value: "height"
use_weight Object { value= "weight" , checked= true , type= "checkbox" } 检查:true
name: undefined
type: "checkbox"
value: "weight"
weight_kg Object { checked= false , type= "text" , value= "" } 检查:false
name: undefined
type: "text"
value: ""
weight_lb 对象 { value= "47" , checked= false , type= "text" } 检查: false
name: undefined
type: "text"
value: "47"
weight_oz Object { checked= false , type= "text" , value= "" } 检查:false
name: undefined
type: "text"
value: ""
weight_unit_kg 对象 { value= "kg" , name= "weight_units" , checked= false , more...} 检查: false
name: "weight_units"
type: "radio"
value: "kg"
weight_unit_lb 对象 { value= "lb" , name= "weight_units" , checked= false , more...} 检查: false
name: "weight_units"
type: "radio"
value: "lb"
weight_unit_lb_oz 对象 { value= "lb_oz" , name= "weight_units" , checked= true , more...} 检查: true
name: "weight_units"
type: "radio"
value: "lb_oz"