4

我正在解压缩从表单收集的一些数据并设置对象属性。如果输入是文本,我将存储该值。如果它是一个复选框,我将存储“选中”属性。如果它是一台收音机并且已被检查,我将存储该值。这是我的代码:

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"

4

1 回答 1

0

我会重试最后一个条件 beeing isChecked===true ...

这似乎是因为 JavaScript ist 测试是否存在除 false 之外的值 ...因此,如果未设置您的已选中(如果未选中,则不是,因为如果已设置,则它是一个没有值的属性,如果没有,则不存在检查)即使它为空,您仍然会输入 else if。

于 2013-05-03T17:36:05.320 回答