适用于 PHP 但不适用于脚本

比利乔

这是输出

我有这个完美运行的代码。下拉字段包含选项。但是当我尝试使用“添加更多”按钮创建新行时,下拉菜单不起作用。请检查输出。

    <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 脚本有问题,我找不到它。谢谢

里克登汉

有两个问题。

  1. <option>在外部渲染的原因<select>是因为您使用了自关闭<select />标签。您需要/<select name="name[]" />.
  2. 您正在重复使用$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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章