以下に示すPHP & JS関数は連携して、1)配列から要素を取り込み、2)一致するdbselect
値を事前に選択し、 3) の要素の値を操作します。options
select
options
focus
PHPヘルパー関数は JS 関数と連携して動作し、db focus
値に接尾辞「_default」が含まれている場合は文字列値を操作しますが、オプション/文字列値にドル記号 (「$」) が含まれている場合にのみトリガーされます。これを必要とするコードは何もありませんが、すべての可能性をテストしましたが、それが唯一の原因であると思われます。
http://click2fit.com/sample_php_select.phpに、コードを組み合わせた機能例を投稿しました。select
実際の問題を確認するには、どちらの要素にも焦点を合わせずに [送信] ボタンをクリックします。これにより、「デフォルト」値を持つecho
2 つの要素 (ドル記号のあるものとないもの) の値が投稿されます。select
問題を示す目的で、値をdbから取得する代わりにハードコーディングしました。さらに、JS関数のフィドルをここに投稿しましたhttp://jsfiddle.net/chayacooper/JHAPp/6/
PHP & HTML
<?php
// Helper function that replaces a key while maintaining the entry's position in the array. It does not modify the given array, but returns a new array.
function replaceKey($array, $oldKey, $newKey) {
$newArray = array();
foreach ($array as $key => $value) {
$newArray[($key === $oldKey) ? $newKey : $key] = $value;
}
return $newArray;
}
// Function to select the option matching the value in the db
function printSelectOptions($dataArray, $currentSelection) {
foreach ($dataArray as $key => $value) {
echo '<option ' . (($key == $currentSelection) ? 'selected="selected"' : '') . ' value="' . $key . '">' . $value . '</option>';
}
}
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);
?>
<select name="importance" id="importance">
<?php
// Generates a <select> element with the options specified in this array
$options = array("1"=>"1", "2"=>"2", "3"=>"3", "4"=>"4", "5"=>"5");
// If these are different then the value from the database includes "_default"
if ($row_default['importance'] !== $row['importance']) {
// Change the key for the entry in $options so it includes "_default"
$options = replaceKey($options, $row_default['importance'], $row['importance']);
}
$selected = $row['importance'];
// Pre-selects the option matching the db information
echo printSelectOptions($options, $selected);
?>
</select>
JS 関数
$(function () {
$('select').focus(function () {
var option = $(this).find("option[value*=default]");
option.attr('value', option.attr('value').replace(/_default/g, ''));
});
});
JS関数の目的
apx で最も一般的に選択されるオプションを事前に選択しています。この関数を使用して、これらの値がまだ初期の事前選択/デフォルト状態にある場合と、ユーザーがフォームselect
要素に注目した後にその値を積極的に選択した場合を区別しています。