2009-12-11 117 views
2

我有一個複選框組,需要發佈。PHP - 複選框組

<input type="checkbox" value="true" checked name="chk0[]"> 
<input type="checkbox" value="false" name="chk0[]"> 
<input type="checkbox" value="false" name="chk0[]"> 
<input type="checkbox" value="true" checked name="chk0[]"> 

<input type="checkbox" value="true" checked name="chk1[]"> 
<input type="checkbox" value="false" name="chk1[]"> 
<input type="checkbox" value="true" checked name="chk1[]"> 
<input type="checkbox" value="false" name="chk1[]"> 

請注意,在第一組中,檢查1和4。在第二組中,檢查1和3。 當我張貼此,我得到了選中的複選框的公佈值依次爲下:

[chk0] => Array ( 
      [0] => true 
      [1] => true 
     ) 
[chk1] => Array ( 
      [0] => true 
      [1] => true 
     ) 

我怎樣才能確保我得到的貼值是這樣的:

[chk0] => Array ( 
      [0] => true 
      [3] => true 
     ) 
[chk1] => Array ( 
      [0] => true 
      [2] => true 
     ) 

我想知道選中複選框的鍵,而不是順序顯示我。

謝謝

+0

你爲什麼要索引?將每個複選框的值設置爲id會不會更好? – 2012-12-08 22:47:15

回答

5
<input type="checkbox" value="true" checked name="chk0[0]"> 
<input type="checkbox" value="false" name="chk0[1]"> 
<input type="checkbox" value="false" name="chk0[2]"> 
<input type="checkbox" value="true" checked name="chk0[3]"> 

<input type="checkbox" value="true" checked name="chk1[0]"> 
<input type="checkbox" value="false" name="chk1[1]"> 
<input type="checkbox" value="true" checked name="chk1[2]"> 
<input type="checkbox" value="false" name="chk1[3]"> 

明白我的意思嗎?
<input name="chk0[1]" ...>框的工作方式與PHP中的數組元素一樣。您可以指定將它們原樣傳輸到PHP中的索引作爲$_POST['chk0'][1]元素。

+1

爲什麼投票反對?我是否錯過了什麼?......(當人們投票,然後就是沒有一個字的運行時,恨它。)* – Atli 2009-12-11 18:42:57

0

明確提供您的密鑰。

<input type="checkbox" value="true" checked name="chk0[0]"> 
<input type="checkbox" value="false" name="chk0[1]"> 
<input type="checkbox" value="false" name="chk0[2]"> 
<input type="checkbox" value="true" checked name="chk0[3]"> 

<input type="checkbox" value="true" checked name="chk1[0]"> 
<input type="checkbox" value="false" name="chk1[1]"> 
<input type="checkbox" value="true" checked name="chk1[2]"> 
<input type="checkbox" value="false" name="chk1[3]"> 

我建議將它們納入一個單一的陣列,而不是兩個不同的:

<input type="checkbox" value="true" name="chk[0][0]" checked> 
<input type="checkbox" value="false" name="chk[0][1]"> 
<input type="checkbox" value="false" name="chk[0][2]"> 
<input type="checkbox" value="true" name="chk[0][3]" checked> 

<input type="checkbox" value="true" name="chk[1][0]" checked> 
<input type="checkbox" value="false" name="chk[1][1]"> 
<input type="checkbox" value="true" name="chk[1][2]" checked> 
<input type="checkbox" value="false" name="chk[1][3]"> 

產生以下的輸出:

Array 
(
    [chk] => Array 
     (
      [0] => Array 
       (
        [0] => true 
        [3] => true 
       ) 

      [1] => Array 
       (
        [0] => true 
        [2] => true 
       ) 

     ) 

) 
0

使用複選框的名稱的鍵爲name="chk[3]",而不是name="chk[]"

1

我答1同意,但問題是,我使用的是家長的複選框來切換子類別複選框。如果我有chk0 [0],chk0去[1]等,在toggleParentCheckboxes函數失敗...請看看這個:

<html> 
<head> 

<script src="http://www.google.com/jsapi"></script> 

<script> 
google.load("jquery", "1.3.2"); 
google.load("jqueryui", "1.7.2"); 
</script> 

<script language="JavaScript"> 
function toggleTableRows() 
{ 
    $(document).ready(function() { 
     $('img.parent') 
      .css("cursor","pointer") 
      .toggle(
       function() { 
       $(this).attr("title","Click to Collapse") 
       $(this).attr("src","arrow_expanded.gif"); 
       $('tr').siblings('#child-'+this.id).toggle(); 
       }, 
       function() { 
       $(this).attr("title","Click to Expand"); 
       $(this).attr("src","arrow_collapsed.gif"); 
       $('tr').siblings('#child-'+this.id).toggle(); 
       } 
     ); 

      initCheckBoxes(); 
    }); 
} 

function toggleCheckboxes(current, form, field) { 
     $("#"+ form +" :checkbox[name='"+ field +"[]']").attr("checked", current.checked); 
} 

function toggleParentCheckboxes(current, form) { 
     var checked = ($("#"+ form +" :checkbox[name='"+ current.name +"']").length == $("#"+ form +" :checkbox[name='"+ current.name +"']:checked").length); 
     $("#"+ form +" :checkbox[name='"+ current.name.replace("[]", "") +"']").attr("checked", checked); 
} 

function initCheckBoxes() { 
    $("#frmDinnerMenu :checkbox:checked").each(function() { 
     if (this.name.replace(/[0-9]/g, "") == "chk[]") { 
      toggleParentCheckboxes(this, "frmDinnerMenu"); 
     } 
    }); 
} 
</script> 
<script language="JavaScript">toggleTableRows();</script> 
</head> 
<body> 

<form name="frmDinnerMenu" id="frmDinnerMenu" method="POST" action=""> 
<table border=1> 
<tr> 
    <td><img class="parent" id="0" src="arrow_collapsed.gif" title="Click to Expand">Category - Fruits</td> 
    <td><input type="checkbox" name="chk0" onclick="toggleCheckboxes(this, 'frmDinnerMenu', 'chk0');"/></td> 
</tr> 
<tr style="display: none;" id="child-0"> 
    <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Apple</td> 
    <td><input type="checkbox" value="0" name="chk0[0]" onclick="toggleParentCheckboxes(this, 'frmDinnerMenu');"/></td> 
</tr> 
<tr style="display: none;" id="child-0"> 
    <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Banana</td> 
    <td><input type="checkbox" checked value="0" name="chk0[1]" onclick="toggleParentCheckboxes(this, 'frmDinnerMenu');"/></td> 
</tr> 
<tr style="display: none;" id="child-0"> 
    <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Orange</td> 
    <td><input type="checkbox" checked value="0" name="chk0[2]" onclick="toggleParentCheckboxes(this, 'frmDinnerMenu');"/></td> 
</tr> 

<tr><td><img class="parent" id="1" src="arrow_collapsed.gif" title="Click to Expand">Category - Vegetables</td><td><input type="checkbox" name="chk1" onclick="toggleCheckboxes(this, 'frmDinnerMenu', 'chk1');"/></td></tr> 
<tr style="display: none;" id=child-1><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cabbage</td><td><input type="checkbox" checked value="0" name="chk1[]" onclick="toggleParentCheckboxes(this, 'frmDinnerMenu');"/></td></tr> 
<tr style="display: none;" id=child-1><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tomatoes</td><td><input type="checkbox" checked value="0" name="chk1[]" onclick="toggleParentCheckboxes(this, 'frmDinnerMenu');"/></td></tr> 
<tr style="display: none;" id=child-1><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Green Peppers</td><td><input type="checkbox" checked value="0" name="chk1[]" onclick="toggleParentCheckboxes(this, 'frmDinnerMenu');"/></td></tr> 
<tr><td><img class="parent" id="2" src="arrow_collapsed.gif" title="Click to Expand">Category - Dessert</td><td><input type="checkbox" name="chk2" onclick="toggleCheckboxes(this, 'frmDinnerMenu', 'chk2');"/></td></tr> 
<tr style="display: none;" id=child-2><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ice Cream</td><td><input type="checkbox" checked value="0" name="chk2[]" onclick="toggleParentCheckboxes(this, 'frmDinnerMenu');"/></td></tr> 
<tr style="display: none;" id=child-2><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Custard</td><td><input type="checkbox" checked value="0" name="chk2[]" onclick="toggleParentCheckboxes(this, 'frmDinnerMenu');"/></td></tr> 
<tr style="display: none;" id=child-2><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Chocolate Cake</td><td><input type="checkbox" checked value="0" name="chk2[]" onclick="toggleParentCheckboxes(this, 'frmDinnerMenu');"/></td></tr> 
</table> 
</form> 
</body> 
</html> 

我怎樣才能解決這個問題,所以反覆的作品,也是交變量是我想要的方式..

感謝

+0

這是一個完全不同的問題,而不是你最初提出的問題。你應該創建一個新的問題提交。 – Sampson 2009-12-11 19:01:23