将右侧单选按钮设置为已选中

时间:2012-10-18 16:33:05

标签: php variables radio-button set

下面是一个带参数的函数(在本例中)可以包含'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;
}

3 个答案:

答案 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");