下面是一个带参数的函数(在本例中)可以包含'cat','dog'或'bird'。该函数包含一个表单,我希望能够将正确的单选按钮设置为选中,具体取决于变量$ animal包含的选项。
如何以优雅的方式实现这一目标?
public function SetAsChecked($animal) {
// $animal = 'cat', 'dog' and 'bird'
$html = "
<form method='post'>
<p>Option</p>
<input type='radio' name='animals' value='1'> Cat<br />
<input type='radio' name='animals' value='2'> Dog<br />
<input type='radio' name='animals' value='3'> Bird<br />
</form>";
return $html;
}
答案 0 :(得分:3)
创建一个选项数组,而不是重复HTML:
public function SetAsChecked($animal){
$options = array(
'1' => 'Cat',
'2' => 'Dog',
'3' => 'Bird'
);
$optionsStr = '';
foreach($options as $value => $name)
{
//$checked = $animal == $name ? 'checked' : ''; // use this if you want case sensitive comparison
$checked = strcasecmp($animal, $name) == 0 ? 'checked' : ''; // case insensitive comparison
$optionsStr .= "<input type='radio' name='options' value='$value' $checked />$name<br />";
}
$html = "
<form method='post'>
<p>Option</p>
$optionsStr
</form>";
return $html;
}
答案 1 :(得分:1)
您需要使用'checked'属性。这应该工作。 $ optValue是变量,'option'属性保存为。
for($i = 1; $i < 3; ++$i) $opchecked[$i] = ""; //Makes sure, that the variables are set.
$opchecked[$optValue] = 'checked'; //Sets the 'correct' option.
$html = "<form method='post'>
<p>Option</p>
<input type='radio' $opchecked[1] name='options' value='1'> Option1<br />
<input type='radio' $opchecked[2] name='options' value='2'> Option2<br />
</form>";
然而,我能想到的最优雅的方法是函数调用。
function getRadio($Value, $Text) {
$checked = (isset($_POST['animal']) && $Value == $_POST['animal']) ? "checked=checked" : "";
return "<input type='radio' $checked name='animal' value='$Value'>$Text</input><br />";
}
$html = "<form method='post'>
<p>Option</p>".
getRadio(1, "Dog").
getRadio(2, "Cat").
getRadio(3, "Bird").
</form>";
此函数调用不会在第一次调用时选择任何内容(因为'$ _POST ['animal']'尚未设置),但之后它将始终保持先前的动物'选中'。如果要提供“默认选择”,请添加另一个参数,如下所示:
function getRadio($Value, $Text, $default) {
if(!isset($_POST['animal']) && $default || isset($_POST['animal']) && $Value == $_POST['animal']) $checked = "checked=checked";
else $checked = "";
return "<input type='radio' $checked name='animal' value='$Value'>$Text</input><br />";
}
答案 2 :(得分:0)
我发现检查标记和下拉的最佳方法是使用javascript / jQuery,而不是循环遍历数组或执行其他操作。工作非常简单,只需几行代码。
$("input[name=options][value=<?php echo $option; ?>]").attr("checked","checked");