0

次のPHP関数があります。

function pick ($fieldname, $optionvalues, $defvalue=0, $size=0)
{

    $checked = $defvalue;
    echo "<select name=\"$fieldname\" size=\"$size\">\n";

    foreach ($optionvalues as $value)
    echo " <option value = \"$value\"  ".
    (($value == $checked) ? ' selected ' : '') . "> $value </option>\n";
    echo "</select>";
}

これで呼び出すと:

$vals = array('a','b','c','d','e');
pick ('pick2', $vals, 'c');

cページソースで選択済みとしてマークされていても、強調表示されません。私のページのソースは次のとおりです。

<select name="pick2" size="0">
<option value = "a"  > a </option>
<option value = "b"  > b </option>
<option value = "c"   selected > c </option>
<option value = "d"  > d </option>
<option value = "e"  > e </option>
</select>

呼び出し機能を次のように変更した場合:

pick('p',$vals,'c') 

想定どおりに動作します。誰かが私の機能の何が問題なのか説明できますか?

4

2 に答える 2

2

この行を変更

 (($value == $checked) ? ' selected ' : '') . "> $value </option>\n";

 (($value == $checked) ? ' selected="selected" ' : '') . "> $value </option>\n"; 
于 2013-04-12T17:58:44.437 に答える
1

HTML は、HTML 5 標準の下で有効です。それはあなたがリフレッシュしている方法です。更新ボタンをクリックするか F5 キーを押すと、ブラウザは選択内容を記憶します。もう一度 URL に「移動」する必要があります (つまり、アドレス バーをクリックして Enter キーを押します)。

<?php
function pick ($fieldname, $optionvalues, $defvalue='', $size=0){
    $checked = $defvalue;
    echo '<select name="'.$fieldname.'">';
    foreach($optionvalues as $value){
        echo '<option value="'.$value.'"'.($checked==$value?' selected':'').'>'.$value.'</option>';
    }
    echo '</select>';
}

$vals = array('a','b','c','d','e');
pick ('pick2', $vals, 'c');

ブラウザーが選択内容を覚えているのはなぜですか? これは、ほとんどのブラウザーに組み込まれているオプションです (通常は [オプション] でフォーム履歴を保存します)。これを無効にすると、フォーム データが常に「元の状態」にリセットされます。これの問題点は、フォーム データがエンド ユーザーの手に渡ってしまうことです。これは良くありません。

属性を使用して、常にselectednotを使用するようにすることができます。last rememberedautocomplete

<select autocomplete="off">

于 2013-04-12T18:06:39.973 に答える