繁体   English   中英

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

[英]run js function on dynamically created select menu

我有这个代码:

这是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(option);

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

同样从代码结构的角度来看,在用php编写js时要非常小心。 尽管听起来很有趣(例如在高中时做毒品),但它很危险,令人沮丧,并导致无法测试的代码(例如在高中时做毒品)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM