2013-02-09 129 views
0

我正在學習如何從this tutorial series開發WordPress插件,現在我在this tutorial上,但是我發現了一件奇怪的事情:使用兩個RadioButtones來獲取值「True」或「False」可以使用一個複選框使用單選按鈕作爲複選框

<label for="devloungeHeader_yes"> 
    <input type="radio" id="devloungeHeader_yes" name="devloungeHeader" value="true" <?php if ($devOptions['show_header'] == "true") { _e('checked="checked"', "DevloungePluginSeries"); }?> /> 
    Yes 
</label>&nbsp;&nbsp;&nbsp;&nbsp; 
<label for="devloungeHeader_no"> 
    <input type="radio" id="devloungeHeader_no" name="devloungeHeader" value="false" <?php if ($devOptions['show_header'] == "false") { _e('checked="checked"', "DevloungePluginSeries"); }?>/> 
    No 
</label> 

我看到的Joomla管理頁面,在那裏用2個單選按鈕來獲得相同的結果,對類似的東西。

那麼,有沒有(HTML,CSS,JavaScript,PHP,只是任何)使用兩個單選按鈕而不是一個複選框的優勢?

+1

for 2 values nope。單選按鈕與所有可選擇的選項非常相似 - 對於兩個複選框也是如此;-)。但Radibuttons可以有初始值(無),複選框或者預設爲真/假。也許這可能是一個原因 – Najzero 2013-02-09 07:14:47

+0

@Najzero不,這不能成爲理由,因爲在該教程中,它需要結果爲「真」或「假」,默認結果爲「真」,所以我只是在那裏該教程中的錯誤編碼練習。 – Irakli 2013-02-09 07:16:55

+0

本教程已有5年曆史,並且在許多方面已經過時。 – 2013-02-09 07:22:26

回答

0

其實我找到了爲什麼使用兩個單選按鈕,名稱相同,值不同的值「True」和「False」比複選框好。當複選框沒有被選中時,它不會被提交給服務器。但是當你使用帶有「True」和「False」值的單選按鈕時,這些單選按鈕將被提交到服務器上,所以php會從html表單中得到結果。因此,與ckeckbox你只有兩個選擇:

1) when chebox is checked and is submited (value == "checked") 
2) when checkbox is Not checked and it is not submited 

用PHP你有這兩個選項:

<?php 
if (isset($_POST['testCheckBox'])) { 
    // it is submited so it means it is Checked! 
} else { 
    // it is not submited because it is not checked or there is something wrong! 
} 
?> 

但隨着單選按鈕,你有三種選擇:

1) when radio "True" is checked and is submited 
2) when radio "False" is checked and is submited 
3) when radio is not SUBMITED, so something is not working properly 

PHP例子:

<?php 
if (isset($_POST['testRadioButton'])) { // testRadioButton is submited! 
    if($_POST['testRadioButton'] == "true"){ 
     // True is checked, do something 
    } elseif(($_POST['testRadioButton'] == "false"){ 
     // False is checked, do something 
    } 
} else { 
    // it not Submited! so there is definitely something wrong with code 
} 
?>