gpt4 book ai didi

javascript - 事件不会添加到 for 循环中

转载 作者:行者123 更新时间:2023-11-28 21:21:11 25 4
gpt4 key购买 nike

这是 html。如果单击链接,我想用一些文本替换它前面的 span 元素。

<p><span id="sp1">that1</span> <a href="#" id="update1">Update1</a></p>
<p><span id="sp2">that2</span> <a href="#" id="update2">Update2</a></p>
<p><span id="sp3">that3</span> <a href="#" id="update3">Update3</a></p>
<p><span id="sp4">that4</span> <a href="#" id="update4">Update4</a></p>
<p><span id="sp5">that5</span> <a href="#" id="update5">Update5</a></p>

如您所见,我的想法是为 anchor 的跨度提供相同的 ID 和数字。

在我的jquery代码中,我循环遍历所有 anchor 元素,给它们一个点击事件,导致其前面的span元素被替换。

<script type="text/javascript" >

$(document).ready(function() {
var numSpans = $("span").length;
for (n=0;n<=numSpans;n++) {
$("a#update" + n).click(function(e){
$('span#sp' + n).replaceWith('this');
e.preventDefault();
});
}
});

</script>

由于某种原因,这不起作用。

我做错了什么?

最佳答案

原始代码的问题是您正在变量n上创建一个闭包。当事件处理程序被调用时,它是在调用点而不是声明点使用 n 的值来调用的。您可以通过添加警报调用来查看这一点:

$(document).ready(function() {
var numSpans = $("span").length;
for (n = 1; n <= numSpans; n++) {
$("a#update" + n).click(function(e) {
alert(n); //Alerts '6'
$('span#sp' + n).replaceWith('this');
e.preventDefault();
});
}
})

解决此问题的一种方法是在每次迭代中对 n 的值创建一个闭包,如下所示:

$(document).ready(function() {
var numSpans = $("span").length;
for (n = 1; n <= numSpans; n++) {
$("a#update" + n).click(
(function(k) {
return function(e) {
alert(k);
$('span#sp' + k).replaceWith('this');
e.preventDefault();
}
})(n)
);
}
})

但是,这很困惑,您最好使用更 jQuery 的方法。

<小时/>

实现此目的的一种方法是从代码中删除 id。除非您需要它们做其他事情,否则不需要它们:

<p><span>that1</span> <a href="#" class="update">Update1</a></p>
<p><span>that2</span> <a href="#" class="update">Update2</a></p>
<p><span>that3</span> <a href="#" class="update">Update3</a></p>
<p><span>that4</span> <a href="#" class="update">Update4</a></p>
<p><span>that5</span> <a href="#" class="update">Update5</a></p>

jQuery:

$(function() {
$('a.update').live('click', function() {
$(this).siblings('span').replaceWith("Updated that!");
});
});

jsFiddle

关于javascript - 事件不会添加到 for 循环中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6332589/

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