我有这个完美运行的代码。下拉字段包含选项。但是当我尝试使用“添加更多”按钮创建新行时,下拉菜单不起作用。请检查输出。
<select name="name[]"/>
<?php
echo "<option SELECTED DISABLED>SELECT CUSTOMER</option>";
while($result = mysqli_fetch_array($query1)){
echo "<option value='$result[description]'>" . $result['description'] . "</option>";
}
?>
</select>/td>
<td><button type="button" name="add" id="add" class="btn btn-success">Add More</button></td>
使用这样的脚本:
$(document).ready(function(){
var i=1;
$('#add').click(function(){
i++;
$('#dynamic_field').append('<tr id="row'+i+'"><td><select name="name[]"/><?php echo "<option SELECTED DISABLED>SELECT CUSTOMER</option>"; while($result = mysqli_fetch_array($query1)){ echo "<option value='$result[description]'>" . $result['description'] . "</option>";}?></select></td> <td><button type="button" name="remove" id="'+i+'" class="btn btn-danger btn_remove">X</button></td></tr>');
});
但是 #add 不会创建一个新的输入表单。我相信 #dynamic_field 脚本有问题,我找不到它。谢谢
有两个问题。
<option>
在外部渲染的原因<select>
是因为您使用了自关闭<select />
标签。您需要/
从<select name="name[]" />
.$query1
两个循环。如果不重置内部指针(结果对象内的指针,用于跟踪您请求的行),您就无法做到这一点。mysqli_data_seek($query1, 0);
在开始第二个while
循环之前,您可以通过在任何地方使用来做到这一点。这将使您的 javascript 代码像这样(我将 PHP 代码分成多行以提高可读性):
$(document).ready(function(){
var i=1;
$('#add').click(function(){
i++;
$('#dynamic_field').append('<tr id="row'+i+'"><td><select name="name[]"><?php
echo "<option SELECTED DISABLED>SELECT CUSTOMER</option>";
mysqli_data_seek($query1, 0);
while($result = mysqli_fetch_array($query1)){
echo "<option value=\\'$result[description]\\'>" . $result['description'] . "</option>";
}
?></select></td><td><button type="button" name="remove" id="'+i+'" class="btn btn-danger btn_remove">X</button></td></tr>');
})
});
编辑:关于问题1 的更多信息:
当涉及到无效的 HTML 代码时,浏览器是非常宽容的。他们看到你的自闭<select />
后跟<option>
a</select>
并且他们认为“哦,好吧,那个首字母<select />
应该是<select>
then”并正确渲染它。但是,当您直接使用 Javascript 操作 DOM 时(在本例中,通过使用 jQuery 的.append()
函数),所有错误纠正逻辑都将被跳过,您必须在第一次正确操作。
编辑 2:由于您对 使用单引号,因此.append('[...]')
会与该<option value='[...]'>
字符串内部发生冲突。<option>
需要转义的单引号。由于\
是 PHP 中的转义字符,因此您需要将它们双斜线。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句