gpt4 book ai didi

javascript - 使用 JavaScript 创建和复制/复制选择/选项列表菜单

转载 作者:可可西里 更新时间:2023-11-01 12:53:06 27 4
gpt4 key购买 nike

我有一个选择列表菜单:

<label>
<select name="select" id="select1">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
</label>

我想用准确的信息动态地复制它。我可以通过创建一个 select 元素并从第一个 select 复制 innerHTML 来做到这一点。 (我还生成了一个表行,我的 select 将位于该行上,但这并不重要):

var selectt = document.createElement("select");
selectt.setAttribute("name", "select"+counter);
selectt.setAttribute("id", "select"+counter);
selectt.onchange = function() {sellcalculate(counter);

cell3.appendChild(selectt);
document.getElementById("select"+counter).innerHTML=document.getElementById("select1").innerHTML;

它在 Firefox 上运行良好,但 IE 仅创建选择但不会复制选项。

我的第二个问题是:如何向创建的元素添加 onchange 事件?

 selectt.onchange = function(){sellcalculate(counter)};

这似乎行不通。

这是编辑功能和解决 ie 问题后的完整功能:

function addRow(tableID) {
var counter = document.getElementById('rowcounter').value;
counter++;
document.getElementById('rowcounter').value = counter;
var table = document.getElementById(tableID);
var rowCount = table.rows.length;
var row = table.insertRow(rowCount);
var cell = row.insertCell(0);
var cell2 = row.insertCell(1);
var element2 = document.createElement("input");
element2.type = "text";
element2.id = "amount" + counter;
element2.onchange = function () {
sellcalculate(counter)
};
cell2.appendChild(element2);
var cell3 = row.insertCell(2);
var selectt = document.createElement("select");
selectt = document.getElementById("select1").cloneNode(true);
selectt.setAttribute("name", "select" + counter);
selectt.setAttribute("id", "select" + counter);
selectt.onchange = (function (cntr) {
return function () {
sellcalculate(cntr);
};
})(counter);
cell3.appendChild(selectt);
}

最佳答案

我现在无法在IE中进行测试,但是请尝试使用 .clonenode()而不是创建新元素。

var selectt = document.getElementById("select1").cloneNode(true);

selectt.setAttribute("name", "select"+counter);
selectt.setAttribute("id", "select"+counter);
selectt.onchange = (function( cntr ) {
return function() { sellcalculate(cntr); };
})( counter );

cell3.appendChild(selectt);

true 参数传递给 .cloneNode 使其成为一个深克隆(所有后代)。

此外,我假设您希望 onchange 处理程序引用 counter当前值,而不是可能不同的 future 值。因此,我使用新功能调用范围范围。

现在,无论 counter 的值是什么,这段代码运行时都将是传递给 sellcalculate() 的值。

关于javascript - 使用 JavaScript 创建和复制/复制选择/选项列表菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6514943/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com