0

以下は、(この例の場合)「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;
}
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

'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 />";
}
于 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 に答える