2011-06-20 105 views
8

我對複選框有疑問。HTML表單中的複選框數組

<form method="post"> 
I speak the following languages: 
<input type="checkbox" name="lang[]" value="en">English<br /> 
<input type="checkbox" name="lang[]" value="fr">Français<br /> 
<input type="checkbox" name="lang[]" value="es">Español<br /> 
</form> 

是否有必要以命名郎[](使用陣列)或I可以給每個複選框一個單獨的名稱,如複選框:

<form method="post"> 
I speak the following languages: 
<input type="checkbox" name="lang_en" value="en">English<br /> 
<input type="checkbox" name="lang_fr" value="fr">Français<br /> 
<input type="checkbox" name="lang_es" value="es">Español<br /> 
</form> 

問題1相信無論作品,如果是的話,你什麼時候決定使用哪一個?

問題2我使用以上,所以我可以用PHP檢測該複選框的選擇是通過使用類似於if(isset($_POST['lang_en']))一個代碼列出的第二個方法。如果我要使用第一種方法,是否有一種快速方法來檢查是否選擇了特定的複選框?目前我能想到的未經測試的解決方案涉及到做一個if(in_array('lang_en', $_POST['lang']))來檢查它是否存在於$ _POST中。

問題3主要問題是這樣的:我使用第二種方法,所以我可以很容易地檢查一個複選框是否在PHP中被選中。現在我想添加一個文本鏈接,點擊後將選中所有的複選框。我的Javascript不太好,所以我使用http://www.shiningstar.net/articles/articles/javascript/checkboxes.asp的腳本,但示例腳本使用數組作爲複選框的名稱,而我的PHP代碼無法檢查複選框是否與數組一起用於複選框的名稱。 javascript代碼如何修改爲無數組工作?

希望我能想出這個煩人的問題!謝謝!

編輯

的Javascript:

<!-- Begin 
function checkAll(field) 
{ 
for (i = 0; i < field.length; i++) 
    field[i].checked = true ; 
} 

function uncheckAll(field) 
{ 
for (i = 0; i < field.length; i++) 
field[i].checked = false ; 
} 
// End --> 
</script> 

HTML:

<form action="http://localhost/website/places/search" method="post" accept-charset="utf-8" name="subcategory"> 

<ul> 
    <li><input type="checkbox" name="cuisine_American" value="American" /> American</li> 
    <li><input type="checkbox" name="cuisine_Chinese" value="Chinese" onClick="checkAll(document.subcategory.cuisine)" /> Chinese</li> 
    <li><input type="checkbox" name="cuisine_Indian" value="Indian" onClick="checkAll(document.subcategory.cuisine)" /> Indian</li> 
    <li><input type="checkbox" name="cuisine_Japanese" value="Japanese" onClick="checkAll(document.subcategory.cuisine)" /> Japanese</li> 
    <li><input type="checkbox" name="cuisine_Korean" value="Korean" onClick="checkAll(document.subcategory.cuisine)" /> Korean</li> 
    <li><input type="checkbox" name="cuisine_Mexican" value="Mexican" onClick="checkAll(document.subcategory.cuisine)" /> Mexican</li> 
    <li><input type="checkbox" name="cuisine_Middle Eastern" value="Middle Eastern" onClick="checkAll(document.subcategory.cuisine)" /> Middle Eastern</li> 
    <li><input type="checkbox" name="cuisine_Pakistani" value="Pakistani" onClick="checkAll(document.subcategory.cuisine)" /> Pakistani</li> 
    <li><input type="checkbox" name="cuisine_Italian" value="Italian" onClick="checkAll(document.subcategory.cuisine)" /> Italian</li> 
</ul> 

</form> 
+1

附加選項 - ''。這是我在需要動態複選框列表時使用的。當列表是靜態的(即硬編碼)時,我使用'name ='lang_en''選項。我從不使用複選框的'value'屬性。 – binaryLV

+0

哇,這太酷了,我必須嘗試一下,謝謝! – Nyxynyx

回答

6

答案:

  1. 無論是工作......取決於你是否要明確的名稱或數組
  2. 您還可以使用array_key_exists()
  3. 你可以發佈你正在使用到你的問題的JavaScript代碼?我會採取進一步的看看...

UPDATE:

下面是實現您onclick處理一個jQuery解決方案:

function checkAll(field){ 
    $(':checkbox[name^="cuisine_"]').each(function(index){ 
     this.checked=true; 
    }); 
} 

function uncheckAll(field){ 
    $(':checkbox[name^="cuisine_"]').each(function(index){ 
     this.checked=false; 
    }); 
} 

注意,你真的不要除非你想推廣並傳入startwith模式的字符串(例如cuisine_),否則不需要傳入field

+0

hi thnx!我將代碼包含在上述原始主文章中 – Nyxynyx

+0

您有興趣爲#3使用jQuery嗎?我可以提出一個解決方案,利用jQuery選擇器構建以「cuisine_」開頭的所有複選框元素的數組。讓我知道。 –

+0

是的,那會很棒!我不得不很快使用AJAX,所以我也必須學習jQuery。 – Nyxynyx

6

1。兩者都可以工作,lang []的解決方案更加靈活。例如,如果你有幾個類別的複選框列表的真正長表格,例如。語言用戶說話,他訪問的國家,他駕駛的汽車,並且假設每個列表包含10個元素,然後硬編碼每個都是一個痛苦......在PHP方面,您必須手動檢查每個元素,並與陣列,你可以這樣做:

if (isset($_POST['lang'] && is_array($_POST['lang']) 
{ 
    // let's iterate thru the array 
    foreach ($_POST['lang'] as $lang) 
    { 
     // do some super-magic here 
     // in your example array elements would be $_POST['lang'] = array('en','fr','es') 
    } 
} 

2。如上所述檢查是否選擇了任何語言檢查:

if (in_array('en', $_POST['lang'])) 

3。如果您打算使用jQuery,請使用以下代碼片段:

// selector ATTRIBUTE*=VALUE find all tags wchich ATTRIBUTE string contains VALUE 
$('input[name*=lang]').attr('checked', 'checked'); // check 
$('input[name*=lang]').removeAttr('checked'); // uncheck