简体   繁体   English

jQuery每个在同一元素上运行多次

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM