0

下面是一个带有参数的函数(在本例中)可以包含“猫”、“狗”或“鸟”。该函数包含一个表单,我希望能够将右侧的单选按钮设置为选中状态,具体取决于变量 $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;
}
4

3 回答 3

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;
}
于 2012-10-18T16:41:53.820 回答
1

您需要使用“已检查”属性。这应该有效。$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 />";
}
于 2012-10-18T16:37:27.070 回答
0

我发现做复选标记和下拉的最好方法是在使用 javascript/jQuery 之后,而不是循环遍历数组或做其他事情。工作非常简单,只需几行代码。

$("input[name=options][value=<?php echo $option; ?>]").attr("checked","checked");
于 2012-10-18T16:39:32.033 回答