gpt4 book ai didi

javascript - 动态生成的 Select-Elements 和 JavaScript 闭包

转载 作者:行者123 更新时间:2023-12-02 19:37:14 26 4
gpt4 key购买 nike

我想生成一些<select动态元素。我正在复制现有的一个,仅更改名称和 onchange-Event。这就是我的问题所在:每个 <select>有自己的ID。当 onChange-Event 触发时,它应该响应元素的值和 ID。我不知道如何准确定义 JavaScript 闭包。我用“this.value”尝试过,但显然这不起作用......我已经找到this例如,但它对我来说根本不起作用:/

JavaScript:

var i = 0;
var selectArray = [];

function addSelector(){

var container = document.getElementById("check0");

selectArray[i] = document.getElementsByName("select0")[0].cloneNode(true);
selectArray[i].name = 'select'+i;
selectArray[i].onchange = function(v, i) {
return function() {
changeType(v, i)
}
}(this.value, i);

container.appendChild(selectArray[i]);
}

function changeType(selected, i) {
switch (selected) {
case 'One':
alert(selected+' , '+i);
break;
case 'Two':
alert(selected+' , '+i);
break;
case 'Three':
alert(selected+' , '+i);
break;
case 'Four':
alert(selected+' , '+i);
break;
case 'Five':
alert(selected+' , '+i);
break;
}
}

(我也尝试发布 HTML,但由于某种原因我无法做到这一点;))

Here is the fiddle

最佳答案

this.value这里不知道:

function addSelector(){
/* ... */
selectArray[i].onchange = (function(v, i) {
return function() {
changeType(v, i)
}
})(this.value, i);
/* ... */
}

this将是undefined (严格模式)或window (正常模式)。 JavaScript 应该如何知道 this是对创建/克隆的 <select> 的引用目的? this在您的 onchange 中将是正确的,因此您不必通过闭包包含此内容,只需包含索引 i必须包括:

selectArray[i].onchange = (function(index) {
return function() {
changeType(this.value, index)
}
})(i);

请注意,您的警报语法是错误的 - 您应该使用 alert(selected + " " + i)相反,因为第二个参数将被忽略。

另请参阅:

关于javascript - 动态生成的 Select-Elements 和 JavaScript 闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10805826/

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