2013-02-09 131 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 
} 
?>