このfocus
関数を使用すると、Javascriptで要素の選択オプションの値を操作できます。以下のPHP関数で使用する同様の関数を作成する必要があります。
フォーム1では、300以上の選択要素に対して最も一般的に選択されるオプションを事前に選択します。関数(JSとjQueryの組み合わせ)を使用すると、これらの値がまだ初期の事前選択/デフォルト状態にある場合と、ユーザーがフォーム要素をクリックしてその値をアクティブに選択したとき(その値に設定したままにすることをアクティブに決定したことを示します)。私はここにこれの実用的な例でフィドルを投稿しました:http://jsfiddle.net/chayacooper/JHAPp/4/
PHPで、顧客アカウントページ(ユーザーが自分の情報を編集できるようにする)で使用する同様の関数を作成するのに問題があります。以下のコードでは、データベース内の情報に一致する値を適切に事前選択できますが、ユーザーが要素に焦点を合わせていないときにデフォルト値を送信するようにコードを変更する方法がわかりません。最初の形式とは異なり、$ options配列の実際の値は、そのフィールドの値をすでに選択している可能性があるため、手動で変更することはできません。(現時点では、「_ default」を機能させるために削除しています)。
おそらく元の関数に似たものが必要だと思いますが、$ options配列の値の代わりにフェッチされた値を使用して、要素がフォーカスされていない場合にその値をPOSTできるようにします。
フォーム1-HTMLおよびJS関数
<select name="jeans">
<option value="$0">$0</option>
<option value="$50_default" selected="selected">$50</option>
<option value="$100">$100</option>
<option value="$150">$150</option>
</select>
$('select').focus(function () {
var option = $(this).find("option[value*=default]");
option.attr('value', option.attr('value').replace(/_default/g, ''));
});
フォーム2-HTMLとPHP
<?php
try {
$stmt = $conn->prepare("SELECT * FROM price WHERE user_id = :user_id");
$stmt->bindValue(':user_id', $user_id);
$stmt->execute();
} catch(PDOException $e) {echo $e->getMessage();}
$row = $stmt->fetch();
$search_default = array('_default');
$replace_default = array('');
$row_default = str_replace($search_default, $replace_default, $row);
// Pre-selects the option matching the db information
function printSelectOptions($dataArray, $currentSelection) {
foreach ($dataArray as $key => $value) {
echo '<option ' . (($key == $currentSelection) ? 'selected="selected"' : '') . ' value="' . $key . '">' . $value . '</option>';
}
}
?>
<select name="jeans">
<?php
// Generates a `Select` element
$options = array("Null"=>"", "$0"=>"$0", "$50"=>"$50", "$100"=>"$100", "$150"=>"$150");
$selected = $row_default['jeans'];
// Pre-selects the option matching the db information
echo printSelectOptions($options, $selected);
?>
</select>