2014-09-29 75 views
0

當下方運行,假設男性檢查上運行多次,我希望jsonObj看起來像這樣jQuery的每個相同的元素

0: Object 
    name: "sex" 
    value: "male_value" 

然而,它結束了看起來像這樣。

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

<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

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); 
    } 
}); 

我似乎可以得到它正常工作,如果我不使用switch語句,但我不明白爲什麼一個簡單的開關會導致這個問題?

+0

看起來你有兩個問題。 1)即使您只需要一個值,您也可以迭代所有輸入。 2)你忘了在你的'switch'中打破。爲了解決第一個問題,一個解決方案是使用[FormData](https://developer.mozilla.org/en-US/docs/Web/API/FormData) – acbabis 2014-09-29 22:53:49

回答

1

的Javascript,像許多類似C語言中,都將落空,從一個case下一個,如果你忘了包括break(如指出here

所以:

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; 
} 

應該排序。

+0

呵呵,好尷尬。我的簡單開關語句不起作用,因爲我甚至沒有正確切換。-_- 謝謝。 – Matt 2014-09-29 22:53:18

0

你已經忘了break語句添加到您的開關,在這種情況下default選項將始終運行:

case "radio": 
    if($(this).prop("checked")) 
    { 
     var name = $(this).attr("name"); 
     var value = $(this).val(); 
     jsonAdd(name, value); 
    } 
    break; 
case "checkbox": 
....