【问题标题】:Works on PHP but not with script适用于 PHP 但不适用于脚本
【发布时间】:2018-10-28 16:45:44
【问题描述】:

this is the output

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

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

【问题讨论】:

  • 欢迎来到 StackOverflow。现在问题是,PHP 是一种服务器端语言,因此不能直接在浏览器中解析。除非您通过 Ajax 从已处理的 php 脚本中动态获取结果,否则您的脚本 sn-p 将无法工作
  • 您使用的是自动关闭的&lt;select /&gt;,您应该使用&lt;select name="name[]"&gt;(没有/)。那么你的&lt;option&gt;s 实际上将在 inside &lt;select&gt;.
  • @rickdenhaan 我删除了 /,但选项为空
  • 你是否在两个循环中重复使用$query1(初始选择和添加额外选择的javascript函数)?如果是这样,您需要先使用mysqli_data_seek($query1, 0); 在第二个循环之前重置它。 (见stackoverflow.com/a/41197555/1941241
  • 是的,我愿意。很抱歉问这个问题,但我该把线放在哪里?

标签: php jquery


【解决方案1】:

有两个问题。

  1. &lt;option&gt;&lt;select&gt; 之外呈现的原因是因为您使用了自动关闭的&lt;select /&gt; 标记。您需要从&lt;select name="name[]" /&gt; 中删除/
  2. 您将$query1 重复用于两个循环。如果不重置内部指针(结果对象内的指针,用于跟踪您请求的行),您将无法做到这一点。在开始第二个 while 循环之前,您可以在任何地方使用 mysqli_data_seek($query1, 0); 来做到这一点。

这将使您的 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 代码,浏览器非常宽容。他们看到您的自动关闭&lt;select /&gt;,然后是&lt;option&gt;&lt;/select&gt;,他们认为“哦,好吧,最初的&lt;select /&gt; 应该是&lt;select&gt; 然后”并正确呈现。但是,当您直接使用 Javascript 操作 DOM 时(在这种情况下,通过使用 jQuery 的 .append() 函数),所有错误纠正逻辑都将被跳过,您必须在第一次正确执行。

编辑 2:由于您对 .append('[...]') 使用单引号,因此您会与该字符串中的 &lt;option value='[...]'&gt; 发生冲突。 &lt;option&gt; 的单引号需要转义。由于\ 是 PHP 中的转义字符,因此您需要对它们进行双斜杠。

【讨论】:

  • mysqli_data_seek($query1, 0);行停止添加更多按钮的工作。但是没有这一行,它会创建一个新的
  • 您的浏览器控制台是否有任何语法错误?或者您有没有在description 列中有' 字符的客户?
  • 我两个都没有...要我发送 .php 文件吗?
  • 每个浏览器都有一个开发者控制台,大部分可以按F12打开
  • 哎呀我的错。它说: Uncaught Error: Bootstrap's JavaScript requires jQuery at bootstrap.min.js:6 sample.php:41 Uncaught SyntaxError: missing ) after argument list
猜你喜欢
  • 1970-01-01
  • 2015-04-14
  • 1970-01-01
  • 2017-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-27
相关资源
最近更新 更多