4

フォームから収集したデータを解凍し、オブジェクトのプロパティを設定しています。入力がテキストの場合、値を保存しています。チェックボックスの場合は、「checked」属性を保存しています。それがラジオでチェックされた場合、値を保存しています。これが私のコードです:

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 のスクリーンショットです。条件内の変数とその値が右側に表示されます。なぜこのコードにヒットするのですか?

編集:質問の変数名をより明確に変更し、Firebug で一致するコードを示す新しいスクリーンショットを掲載しました。また、assessment_data オブジェクトの内容は次のとおりです。

EDIT 2:私は自分の問題の原因を見つけました(他の場所で悪い条件: if(this.height_type = "Length") )。また、最後の else 内のコードが実際には実行されていないこともわかりました。Firebug が実行中のように見せていましたが、その理由がよくわかりません。ステップスルーするときに現在の行を示す黄色の > は、その if ステートメント内の行で停止していましたが、コードは実際には実行されていませんでした。これを jsfiddle で再現できました: http://jsfiddle.net/NDYR8/。なぜそうしているのかはわかりませんが、当分の間は幸せです。

assessment_date Object { value= "05/01/2013" , checked= false , type= "text" } checked: false
名前: 未定義
タイプ: "text"
値: "05/01/2013"

child_name Object { name= "child_name" , checked= false , type= "text" }
checked: false
名前: "child_name"
タイプ: "テキスト"
値: ""

dob Object { value= "05/01/2009" , checked= false , type= "text" }
確認: false
名前: 未定義
タイプ: "text"
値: "05/01/2009"

female Object { value= "female" , name= "gender" , checked= false , more...}
checked: false
name: "gender"
type: "radio"
value: "female"

head_cm Object { checked= false , type= "text" , value= "" }
checked: false
名前: 未定義
タイプ: "text"
値: ""

head_in Object { checked= false , type= "text" , value= "" }
checked: false
名前: 未定義
タイプ: "text"
値: ""

head_unit_cm Object { value= "cm" , name= "head_units" , checked= false , more...} チェック済み: false
名前: "head_units"
タイプ: "radio"
値: "cm"

head_unit_in Object { value= "in" , name= "head_units" , checked= true , more...}
チェック済み: true
名前: "head_units"
タイプ: "radio"
値: "in"

height_cm Object { checked= false , type= "text" , value= "" } checked: false
名前: 未定義
タイプ: "text"
値: ""

height_ft オブジェクト { 値 = "42" 、チェック済み = false 、タイプ = "テキスト" } チェック済み: false
名前: 未定義
タイプ: "テキスト"
値: "42"

height_in オブジェクト { 値 = "42" 、チェック済み = false 、タイプ = "テキスト" } チェック済み: false
名前: 未定義
タイプ: "テキスト"
値: "42"

height_type Object { value= "Height" , name= "height_type" , checked= true , more...} checked: true
name: "height_type"
type: "radio"
value: "Height"

height_unit_cm Object { value= "cm" , name= "height_units" , checked= false , more...} チェック済み: false
名前: "height_units"
タイプ: "radio"
値: "cm"

height_unit_ft_in Object { value= "ft_in" , name= "height_units" , checked= false , more...} チェック済み: false
名前: "height_units"
タイプ: "radio"
値: "ft_in"

height_unit_in Object { value= "in" , name= "height_units" , checked= true , more...} チェック済み: true
名前: "height_units"
タイプ: "radio"
値: "in"

length_type Object { value= "長さ" , name= "height_type" , checked= false , more...} チェック済み: false
名前: "height_type"
タイプ: "radio"
値: "長さ"

male Object { value= "male" , name= "gender" , checked= true , more...} checked: true
name: "gender"
type: "radio"
value: "male"

reload Object { value= " Clear and \n Start Over " , checked= false , type= "button" } checked: false
name: undefined
type: "button"
value: " Clear and \n Start Over "

use_head_circ Object { value= "head_circumference" , checked= false , type= "checkbox" } 確認済み: false
名前: 未定義
タイプ: "checkbox"
値: "head_circumference"

use_height Object { value= "height" , checked= true , type= "checkbox" } checked: true
名前: 未定義
タイプ: "checkbox"
値: "height"

use_weight Object { value= "weight" , checked= true , type= "checkbox" } checked: true
名前: 未定義
タイプ: "checkbox"
値: "weight"

weight_kg Object { checked= false , type= "text" , value= "" } checked: false
名前: 未定義
タイプ: "text"
値: ""

weight_lb オブジェクト { 値 = "47" 、チェック済み = false 、タイプ = "テキスト" } チェック済み: false
名前: 未定義
タイプ: "テキスト"
値: "47"

weight_oz Object { checked= false , type= "text" , value= "" } checked: false
名前: 未定義
タイプ: "text"
値: ""

weight_unit_kg Object { value= "kg" , name= "weight_units" , checked= false , more...} チェック済み: false
名前: "weight_units"
タイプ: "radio"
値: "kg"

weight_unit_lb Object { value= "lb" , name= "weight_units" , checked= false , more...} チェック済み: false
名前: "weight_units"
タイプ: "radio"
値: "lb"

weight_unit_lb_oz Object { value= "lb_oz" , name= "weight_units" , checked= true , more...} チェック済み: true
名前: "weight_units"
タイプ: "radio"
値: "lb_oz"

4

1 に答える 1

0

isChecked===true である最後の条件で再試行します...

これは、JavaScript が false 以外の値があるかどうかをテストしているためと思われます...したがって、チェックが設定されていない場合 (チェックされていない場合はそうではありません。設定されている場合は値のない属性であり、設定されていない場合は存在しないためです)オンにした場合) null であっても、else if を入力します。

于 2013-05-03T17:36:05.320 に答える