2011-10-24 39 views
0

在家里试试这个:
写形式在PHP中显示复选框列表:选中复选框属性设置,无论价值

$checkboxes = array('one' => 1, 'two' => 2, 'three' => 3); 
$html = "<html><body><form name=\"myForm\" action=\"this\" method=\"post\"><ul>Check Test"; 

foreach ($checkboxes as $id => $value) 
{ 
    $checkVal = (isset($_POST['check_test'][$id])) ? 'true' : 'false'; 
    $checkList = "<li><input type=\"checkbox\" name=\"check_test[]\" id=\"$id\" 
        value =\"$value\" checked=\"$checkVal\" />$name = $value</li>\n"; 
} 
$checkList .= "<input type=\"submit\" value=\"Submit\">"; 
echo $html.$checkList."</ul></body></html>"; 

你会发现,无论你放什么到$ checkVal当你点击提交时,你的复选框将全部被检查。我的解决方法是扩展$ checkVal变量,将整个“checked =”状态设置为“无”或“无”。我只是对Firefox(而非Iceweasel)仅查看属性是否设置感到惊讶。为什么甚至有它,如果任何它被设置为不相关

看HTML源选择的属性会显示任何你放入checkval变量DOM规范状态:。 checkboxObject.checked =真|虚假

这里是我的输出:

<ul><li><input type="checkbox" name="check_test[]" id="one" 
         value ="1" checked="false" />one= 1</li> 
    <li><input type="checkbox" name="check_test[]" id="two" 
         value ="2" checked="false" />two= 2</li> 
    <li><input type="checkbox" name="check_test[]" id="three" 
         value ="3" checked="false" />three= 3</li> 

而且瞧!每个盒子都被检查。相反,我已经明确表示在HTML中。

回答

2

错误被忽略。如果检查属性存在,则检查框。

foreach ($checkboxes as $id => $value) 
{ 
    $checkVal = (isset($_POST['check_test'][$id])) ? 'checked="checked"' : ''; 
    $checkList = "<li><input type=\"checkbox\" name=\"check_test[]\" id=\"$id\" 
        value =\"$value\" ".$checkVal." />$name = $value</li>\n; 
} 
+0

正如我在我的文章中提到:“我的解决方法是扩大$ checkVal变量设置整个”要么东西或没有=‘’状态检查。 “我只是指出,为什么麻烦有一个属性”相等“的东西,并代表DOM中的无意义数据?没有其他输入属性以这种方式运作,这是糟糕的设计和一个混乱, 3行代码 – eggmatters

+0

选择不是唯一的,这是一个更像它的数字。[禁用](http://www.w3schools.com/tags/tag_option.asp)例如。是的,它看起来像一种坏设计,但我认为它更适合旧版浏览器的兼容性,对于大多数浏览器,你可以简单地编写选定的内容,但它可以工作,但如果所有标签属性的外观与name =“value”相同,那么实现起来会更容易。 – PiTheNumber

+0

Aha,谢谢当我在完成我的帖子时,我想到这可能都是浏览器的不兼容性,我主要运行IceWeasel,它应该是Mozilla 5,但它有它的调整和connundrums。输入! – eggmatters