我的 PHP 页面上有多个下拉列表,所有下拉列表都是这样创建的:
<?php
//Select values from MySQL Database
$query = "SELECT name FROM Player";
$result = mysql_query($query);
//Show DropDownList
echo '<select name="players" onclick="sortlist(this)">';
while($row = mysql_fetch_assoc( $result ))
{
echo '<option value="'.$row['name'].'">' . $row['name'] . '</option>';
}
echo '</select>';
?>
现在,如果您没有注意到,我会在每个下拉列表上调用一个 javascript 函数“sortlist(this)”。该函数只是按字母顺序对值进行排序。您可以检查脚本:
<script>
function sortlist(selElem) {
var tmpAry = new Array();
for (var i=0;i<selElem.options.length;i++) {
tmpAry[i] = new Array();
tmpAry[i][0] = selElem.options[i].text;
tmpAry[i][1] = selElem.options[i].value;
}
tmpAry.sort();
while (selElem.options.length > 0) {
selElem.options[0] = null;
}
for (var i=0;i<tmpAry.length;i++) {
var op = new Option(tmpAry[i][0], tmpAry[i][1]);
selElem.options[i] = op;
}
return;
}
</script>
我的所有下拉列表都位于这样的表单标记内:
<form accept-charset="utf-8" action="" method="post">
脚本运行正常,我有按字母顺序排列的下拉列表,但每当我选择一个值时,它总是显示第一个值。
最佳答案
尝试这样的事情
<body>
<select id="select_id" >
<option value="B">B</option>
<option value="Z">Z</option>
<option value="C">C</option>
<option value="E">E</option>
<option value="A">A</option>
</select>
</body>
<script type="text/javascript">
function sortlist(selElem) {
var tmpAry = new Array();
for (var i=0;i<selElem.options.length;i++) {
tmpAry[i] = new Array();
tmpAry[i][0] = selElem.options[i].text;
tmpAry[i][1] = selElem.options[i].value;
}
tmpAry.sort();
while (selElem.options.length > 0) {
selElem.options[0] = null;
}
for (var i=0;i<tmpAry.length;i++) {
var op = new Option(tmpAry[i][0], tmpAry[i][1]);
selElem.options[i] = op;
}
return;
}
sortlist(document.getElementById('select_id'));
</script>
原因:您的脚本始终对 onclick 上的选择进行排序,无论您是否选择值,它都会对您选择的值进行排序和重置。
因此,在渲染选择元素后,仅调用一次脚本进行排序
关于javascript - PHP页面: Dropdown always selects the first value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20779480/