gpt4 book ai didi

javascript - 如何在循环运行时强制 Jquery/JS 替换变量?

转载 作者:行者123 更新时间:2023-12-01 03:58:00 25 4
gpt4 key购买 nike

<html>
<header><script src = "/jquery.js"></script></header>
<div id="cars"></div>

<script>
$.post({
url:"/cars.php",
dataType:"JSON",
success:function(cars){
var fromidcount = Object.keys(cars).length;
for (var i=0;i<=(fromidcount-1);i++){
var carname= Object.keys(cars)[i];
$("#cars").append("<input type='button' id='"+carname+"'>");
$("#"+carname).click(function(){
alert("selected "+carname);
});
}
}
});
</script>
</html>

我从 PHP 获取一个 JSON 数组,并使用其中的值通过 Jquery 动态创建 HTML 按钮。到目前为止,它制作了两个 ids=“BMW”和“Toyota”的按钮。然后,我的脚本应该创建指令,以便当单击 id="BMW"时,它会提醒“选定的 BMW”。当点击 id="Toyota"时,它应该提醒“已选择丰田。

但是,当我单击按钮时,两个按钮都会提示“选定的丰田”。我检查了开发工具并确认按钮 ID 是 BMW 和 Toyota,但每个按钮的事件仍然显示 alert("selected "+carname);而不是alert("selected "+"BMW");alert("selected "+"Toyota");

所以我认为发生的情况是,当单击按钮时,Jquery 才会更新 alert("selected "+carname); 中的“carname”变量。 。但此时循环已经结束,所以它获取的值是循环的最后一个值,即丰田。

您可以看到 for 循环内有变量 carname 的多个实例。除 alert("selected "+carname); 中的 carname 实异常(exception),所有 carname 实例都将替换为其各自的值。 。这是为什么,我该如何解决它?

cars 是一个多维数组。 [ [宝马] 、 [丰田] ]

最佳答案

您在这里遇到了 JavaScript 的闭包/词法作用域规则。您需要有另一个函数来关闭添加事件处理程序的 carname 变量,但从 ID 中读取汽车名称可能会更容易,因为您在那里有它:

$("#"+carname).click(function(){
alert("selected " + this.id);
});

如果您需要将 ID 用于其他用途,还可以将汽车名称添加为 data- 属性。

关于javascript - 如何在循环运行时强制 Jquery/JS 替换变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60630306/

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