如果键入radio并检查,如何检查每个输入attr

时间:2013-11-02 23:23:40

标签: javascript jquery html input radio-button

我在div中有一堆输入,我需要选择它们中的每一个,并将名称attr的值和元素值添加到数组中,由于某种原因,我的单选按钮不会传递值。

所以我有html:

         <div id="form">
            <!-- Meno -->
            <span class="form_element_title">Meno:</span>
            <br />
            <input type="text" name="name" id="" class="form_input_element_text" vtype="vietor"/>
            <br />
            <br />
            <!-- Priezvisko -->
            <span class="form_element_title">Priezvisko:</span>
            <br />
            <input type="text" name="surname" id="" class="form_input_element_text" vtype="vietor"/>
            <br />
            <br />
            <!-- Vek -->
            <span class="form_element_title">Vek:</span>
            <br />
            <input type="text" name="age" id="" class="form_input_element_text" vtype="vietor"/>
            <br />
            <br />
            <!-- Pohlavie -->
            <span>Pohlavie:</span>
            <br />
            <input type="radio" name="sex" id="" value="male" class="" vtype="vietor" checked="checked" />
            <span>Muž</span>
            <br />
            <input type="radio" name="sex" id="" value="female" class="" vtype="vietor" />
            <span>Žena</span>
            <br />
            <br />
            <!-- Pohlavie -->
            <span>Dátum narodenia</span>
            <br />
            <input type="date" name="sex" id="" class="form_input_element_text" vtype="vietor" placeholder="DD/MM/RRRR" />
            <br />
            <br />
            <!-- Adresa -->
            <span>Adresa:</span>
            <br />
            <input type="text" name="adresa" id="" class="form_input_element_text" vtype="vietor"/>
            <br />
            <br />
            <button id="submit_button">Submit</button>
        </div>

和JS:

var myArray = [];
$( "input" ).each(function( index ) {

        if($(this).attr('type') == 'radio' && $(this).attr('checked') == 'checked'){
            name = $(this).attr('name');
            value = $(this).val();
        } else {
            name = $(this).attr('name');
            value = $(this).val();
        }

        myArray[name] = value;
    });

    console.log(myArray);

我在控制台上得到了什么:

Datum narodenia: "2013-11-12"
adresa: "123 Road"
age: "19"
length: 0
name: "Jakub"
sex: "female"
surname: "Zak"

即使检查了值=男性的第二个单选按钮?

3 个答案:

答案 0 :(得分:1)

查看您的if声明。

if($(this).attr('type') == 'radio' && $(this).attr('checked') == 'checked'){

} else {

}

其他则基本上意味着“如果不打字,未选中”。因此,未经检查的单选按钮将进入else(与if相同)。这意味着当此代码到达female时,它将替换male。我相信你想忽略未经检查的单选按钮,试试这个:

$( "input" ).each(function( index ) {

    if(this.type == 'radio' && !this.checked){
        return true;  // skip to the next iteration of the loop
    }

    /* Add to object */
});   

答案 1 :(得分:1)

您是否意识到if和else语句都具有相同的代码?

 name = $(this).attr('name');
 value = $(this).val();

相同的代码会在逻辑上生成相同的结果。

答案 2 :(得分:0)

你的if和else案例互相做同样的事情。要仅在选中时获取所有非无线电元素和无线电的值,请尝试改为:

$( "input" ).each(function( index ) {
    if(this.type != 'radio' || this.checked)
       myArray[this.name] = this.value;
});

请注意,您无需在任何地方继续调用$(this)来检索元素值或类型,您可以直接从this访问这些属性。

另请注意,您有另一个元素name="sex"type="date"输入显示在标记中的单选按钮之后。因此,与控制台输出中的sex: "female"相比,我希望该日期输入的值可以覆盖从单选按钮获得的任何内容。您应该重命名其他输入。

演示:http://jsbin.com/OJAcaHE/1/edit

最后,请注意,数组应该与数字索引一起使用。如果你想要字符串键,你应该使用一个对象,即:

myObject = {}
...
myObject[someKey] = someValue;