Javascript条件:混淆与&&

时间:2013-05-03 17:05:02

标签: javascript firebug

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

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。您可以在条件中看到变量,在右侧看到它们的值。为什么要点这个代码?

编辑:我更改了问题中的变量名称以便更清楚,并设置了一个新的屏幕截图,显示Firebug中的代码匹配。此外,这是assessment_data对象的内容:

编辑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"

1 个答案:

答案 0 :(得分:0)

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

这似乎是因为JavaScript正在测试是否存在除false以外的值... 因此,如果未设置已选中(如果未选中则不是,因为它是没有设置值的属性,如果未选中则不存在),即使它为空,您仍然会输入其他内容。