php - 在动态创建的选择菜单上运行 js 函数

标签 php javascript mysql

我有这个代码:

这是addOptions函数

<script>
var values = <?php
$sql="SELECT * FROM billing_sagenominalcodes order by code ASC";
$rs=mysql_query($sql,$conn) or die(mysql_error());
$nominalcodes = array();
while($result=mysql_fetch_assoc($rs))
{
    $nominalcodes[] = $result['code'];
}
echo json_encode($nominalcodes);
?>;
var names = <?php
$sql="SELECT * FROM billing_sagenominalcodes order by code ASC";
$rs=mysql_query($sql,$conn) or die(mysql_error());
$nominalcodesname = array();
while($result=mysql_fetch_assoc($rs))
{
    $nominalcodesname[] = $result['code'] . ' - ' . $result['name'];
}
echo json_encode($nominalcodesname);
?>;
function addOptions(select, values)
{
    for (var i=0, iLen=values.length; i<iLen; i++)
    {
        select.appendChild(new Option(names[i],values[i]));
     }
}
</script>

然后是加行函数

<script language="javascript" type="text/javascript">
var i=1;
function addRow()
{
          var tbl = document.getElementById('table1');
          var lastRow = tbl.rows.length;
          var iteration = lastRow - 1;
          var row = tbl.insertRow(lastRow);

          var sagenominalcodeCell = row.insertCell(3);
          var elSageNominalCode = document.createElement('select');
          elSageNominalCode.type = 'select';
          elSageNominalCode.name = 'sagenominalcode' + i;
          elSageNominalCode.id = 'sagenominalcode' + i;
          sagenominalcodeCell.appendChild(elSageNominalCode);
 i++;
 }
 </script>

然后是 HTML

<select name="sagenominalcode" id="sagenominalcode">
        <script>addOptions(document.getElementById('sagenominalcode'), values);</script>
        </select>
            <input type="button" value="Add" onclick="addRow();" />

它可以添加新行,但没有使用 addOptions 函数填充选择菜单。

有没有什么办法让它在动态创建新的行/选择菜单后运行该功能,然后在调用 addRow 函数时创建的所有其他菜单都运行相同的功能?

最佳答案

所以,多读一点你的代码,我看到你有

new Option(names[i],values[i])

我的问题是 new Option 返回什么?我在您的问题中的任何地方都看不到它的代码。 查看 appendChild 的规范: https://developer.mozilla.org/en-US/docs/DOM/Node.appendChild

它需要传入一个 element。您要做的是使用 createElement() 函数创建一个新元素,如下所示:

var option = document.createElement("option");

然后将内部 html 编辑为您需要的内容,如下所示:

option.innerHTML = "你的选项内容在这里";

然后将元素传入append子函数:

appendChild(选项);

这里使用 jQuery 而不是直接的 js。我敢打赌,您的点击监听器仅绑定(bind)到创建页面时出现在页面上的项目。如果您通过 jQuery 设置监听器,那么它甚至会在动态添加的组件上触发。

同样从代码结构的 Angular 来看,用 php 编写 js 时要非常小心。虽然这听起来很有趣(就像在高中吸毒一样),但它很危险、令人沮丧并且会导致无法测试的代码(就像在高中吸毒一样)。

关于php - 在动态创建的选择菜单上运行 js 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15537696/

相关文章:

javascript - 修复列表中绝对定位的 div 标签的高度

javascript - 在多行文本中使用正则表达式阻止逗号

php - 排名查询不起作用

java - 使用另一个表的结果将数据插入到多个表中

php - 具有相同参数的相同函数的不同输出

php - 获取要删除的已创建文件的文件 ID - Google Drive API

javascript - 在 javascript &lt;script&gt; 标签中找到一个 jquery 对象

mysql - sql building的进出记录

php - 将逗号更改为点,在 php 中使用小数

java - PHP 站点调度 Java 执行?