我在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"
即使检查了值=男性的第二个单选按钮?
答案 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;