Javascript-试图复制一个数组,但没有引用
我有一个选择元素(交付时间),在更改另一个选择元素(交付时间)时需要更新。 在我的HTML/PHP中,我有三个隐藏的selecthours元素,用于选择每天的时间。 在这个javascript中,我有一个事件监听器,用于在交付日进行更改 阵列.原型.推送.应用(t,t3);复制元素,但删除t3(因此,如果用户重新选择该元素为空的日期) t=[…t3];复制元素而不删除t3,但将引用剪切到document.getElementById(“shipping_time”).options,因此我得到一个空选择器Javascript-试图复制一个数组,但没有引用,javascript,arrays,Javascript,Arrays,我有一个选择元素(交付时间),在更改另一个选择元素(交付时间)时需要更新。 在我的HTML/PHP中,我有三个隐藏的selecthours元素,用于选择每天的时间。 在这个javascript中,我有一个事件监听器,用于在交付日进行更改 阵列.原型.推送.应用(t,t3);复制元素,但删除t3(因此,如果用户重新选择该元素为空的日期) t=[…t3];复制元素而不删除t3,但将引用剪切到document.getElementById(“shipping_time”).options,因此我得到一
//update hours
jQuery(document).ready(function($){
const selectElement = document.querySelector('#shipping_day');
selectElement.addEventListener('change', (event) => {
var selectedday = document.getElementById("shipping_day");
var t = document.getElementById("shipping_time").options;
var t1 = document.getElementById("shipping_time1").options;
var t2 = document.getElementById("shipping_time2").options;
var t3 = document.getElementById("shipping_time3").options;
var i;
if(selectedday.options.selectedIndex==0){
t.options=0;
Array.prototype.push.apply(t, t1);
}
if(selectedday.options.selectedIndex==1){
t.length=0;
Array.prototype.push.apply(t, t2);
}
if(selectedday.options.selectedIndex==2){
t.length=0;
//Array.prototype.push.apply(t, t3);
//t = [...t3];
}
console.log(t);
console.log(t1);
console.log(t2);
console.log(t3);
console.log(document.getElementById("shipping_time"));
});
});```
您的问题是DOM节点不能同时位于两个位置,因此实际上您正在移动它们。如果您确实需要使用隐藏字段作为选择选项的源,则必须克隆这些选项,以便将它们复制到DOM中的其他位置:
Array.from(t1).map(x => x.cloneNode(true)).forEach(x => t.add(x));
下面是一个工作演示:
const[mainSelect,abcSelect,defSelect,firstButton,secondButton]=['main-select','abc-select','def-select','first button','second button'].map(document.getElementById.bind(document));
firstButton.addEventListener('单击',()=>{
from(abcSelect.options).map(x=>x.cloneNode(true)).forEach(x=>mainSelect.options.add(x));
});
secondButton.addEventListener('单击',()=>{
from(defSelect.options).map(x=>x.cloneNode(true)).forEach(x=>mainSelect.options.add(x));
});
。隐藏{
显示:无;
}
A.
B
C
D
E
F
添加abc
添加def
谢谢,效果很好。注意,它是t1,不是t1选项是的,确实是我编辑的