[英]jQuery each running multiple times on same element
When the below is run, assuming that male is checked, I expect jsonObj to look like this 当运行以下命令时,假设已检查雄性,我希望jsonObj看起来像这样
0: Object
name: "sex"
value: "male_value"
However, it ends up looking like this. 但是,最终看起来像这样。
0: Object
name: "sex"
value: "male_value"
1: Object
name: "sex"
value: "male_value"
2: Object
name: "sex"
value: "male_value"
3: Object
name: "sex"
value: "female_value"
HTML HTML
<div id="form">
<div id="radio_buttons">
<input type="radio" name="sex" id="male" value="male_value">Male<br>
<input type="radio" name="sex" id="female" value="female_value">Female
</div>
</div>
JAVASCRIPT JAVASCRIPT
function jsonAdd(name, value)
{
item = {};
item ["name"] = name;
item ["value"] = value;
jsonObj.push(item);
}
jsonObj = [];
$("#form input").each(function() {
//Get Input Type
type = $(this).attr("type");
switch(type)
{
case "radio":
if($(this).prop("checked"))
{
var name = $(this).attr("name");
var value = $(this).val();
jsonAdd(name, value);
}
case "checkbox":
if($(this).prop("checked"))
{
var name = $(this).attr("name");
var value = $(this).val();
jsonAdd(name, value);
}
default:
var name = $(this).attr("name");
var value = $(this).val();
jsonAdd(name, value);
}
});
I can seem to get it working properly if I don't use a switch statement but I don't understand why a simple switch would be causing this issue? 如果不使用switch语句,我似乎可以使其正常工作,但我不明白为什么简单的开关会导致此问题?
Javascript, like many C-like languages, will fall through from one case
to the next if you forget to include a break
(as noted here ) JavaScript中,像许多类似C语言中,将从一个落空case
到下一个,如果你忘了包括break
(如注意这里 )
So: 所以:
switch(type)
{
case "radio":
if($(this).prop("checked"))
{
var name = $(this).attr("name");
var value = $(this).val();
jsonAdd(name, value);
}
break;
case "checkbox":
if($(this).prop("checked"))
{
var name = $(this).attr("name");
var value = $(this).val();
jsonAdd(name, value);
}
break;
default:
var name = $(this).attr("name");
var value = $(this).val();
jsonAdd(name, value);
break;
}
should sort you out. 应该把你整理出来。
You have forget to add break
statements to your switch and in this case default
option will run always: 您忘记将break
语句添加到交换机中,在这种情况下, default
选项将始终运行:
case "radio":
if($(this).prop("checked"))
{
var name = $(this).attr("name");
var value = $(this).val();
jsonAdd(name, value);
}
break;
case "checkbox":
....
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.