动态生成<选择>未显示已排序列表中的第一个项目

Dynamically generated <select> is not showing the first item in ordered list

本文关键字:列表 排序 项目 第一个 lt 选择 动态 gt 显示      更新时间:2023-09-26

我遇到了一个使用JavaScript动态生成字段的问题。

我有这个代码:

$goods="SELECT * FROM goods ORDER BY name"; 
$options = "";
$vys = mysqli_query($db, $goods);
while ($arr= mysqli_fetch_assoc($vys)) {
    $options .= "<option value='".$arr['id_good']."'>".$arr['name']."</option>"; 
} 
echo "
<script type='"text/javascript'">
    function addInput(divName){
        var newdiv = document.createElement('div');
        newdiv.innerHTML = '"<select name=idg[]><?php echo $options; ?></select> '";
        document.getElementById(divName).appendChild(newdiv);
    }
</script> 
<form method='post'> 
    <fieldset>
        <div id='dynamicInput'><div>
            <select name=idg[]>
                $options
            </select><br />
        </div></div>
        <input type='button' value='Add another select' onClick='"addInput('dynamicInput'); '">
    </fieldset>
</form>

第一次选择是可以的,但每隔一次(生成)显示的选项列表中没有第一项。我不知道为什么,但每次我单击"添加另一个选择"时,它都会为我生成带有选项的新选择,但第一个项目不见了(显示的第一个项目是"排序列表中的第二个项目")。

当生成新的选择时,排序列表中的第一个项目没有显示,请问错误在哪里?

您正试图在echo语句中使用<?php ?>标记。它们在字符串上下文中没有特殊意义——这不是必需的,而且会弄乱HTML标记。

newdiv.innerHTML = '"<select name=idg[]><?php echo $options; ?></select> '";

应更改为:

newdiv.innerHTML = '"<select name=idg[]>$options</select> '";

修改后的代码看起来像:

<script type='"text/javascript'">
    function addInput(divName){
        var newdiv = document.createElement('div');
        newdiv.innerHTML = '"<select name=idg[]>$options</select> '";
        document.getElementById(divName).appendChild(newdiv);
    }
</script> 

使用时正确答案是错误的

newdiv.innerHTML = '"<select name=idg[]><?php echo $options; ?></select> '";

相反,正确的代码:

newdiv.innerHTML = '"<select name=idg[]>$options</select> '";