getAttribute对于不同的对象是相同的
getAttribute is the same for different objects
我有一个链接列表,这些链接将切换div的显示部分(如旋转木马),每个链接都有一个幻灯片属性。
在JavaScript中,变量_pagerList
是对象列表,每个对象都会将div移动到相应的幻灯片上。问题是它们都做了同样的事情,所以我改为警报,以查看"数据幻灯片"值和所有返回的6。
代码
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
</head>
<body>
<ul>
<li><a class="pager-list" href="" data-slide="1"><img src="http://placehold.it/30" alt="" /></a></li>
<li><a class="pager-list" href="" data-slide="2"><img src="http://placehold.it/30" alt="" /></a></li>
<li><a class="pager-list" href="" data-slide="3"><img src="http://placehold.it/30" alt="" /></a></li>
<li><a class="pager-list" href="" data-slide="4"><img src="http://placehold.it/30" alt="" /></a></li>
<li><a class="pager-list" href="" data-slide="5"><img src="http://placehold.it/30" alt="" /></a></li>
<li><a class="pager-list" href="" data-slide="6"><img src="http://placehold.it/30" alt="" /></a></li>
</ul>
<script>
window.onload = function() {
var _pagerList = document.querySelectorAll('.pager-list');
for ( var i = 0; i < _pagerList.length; i++ ) {
var p = _pagerList[i];
p.onclick = function() {
alert(p.getAttribute('data-slide'));
return false;
};
}
}
</script>
</body>
</html>
您应该更改这一行
alert(p.getAttribute('data-slide'));
到这个
alert(this.getAttribute('data-slide'));
for
循环不会创建新的上下文,因此var p
语句将始终将p
保留为最后一个值集。要解决此问题,您需要使用闭包。
以下内容应该有效:
for ( var i = 0; i < _pagerList.length; i++ ) {
(function (p) {
p.onclick = function() {
alert(p.getAttribute('data-slide'));
return false;
};
})(_pagerList[i]);
}
有关闭包的更多信息,请查看其他SO问题
相关文章:
- JavaScript - 构造对象的不同方法
- “add”函数适用于不同的链接/参数组合
- 日期对象和ISO日期对象返回不同的日期
- 为什么这些对象具有不同的构造函数
- 如何为不同的对象设置不同的灯箱
- 适用于不同设备的响应式画布
- 不同的 CSS 适用于不同的屏幕尺寸
- 将ajax数据返回到对应于不同链接的不同函数
- 自动点击按钮存在于不同的网页在javascript
- 根据已单击的页面从对象的不同数组中进行选择
- Javascript中的作用域错误.调用该对象的不同方法中的方法
- 为webgl中的每个对象使用不同的顶点和片段着色器
- Emberjs -循环遍历数组'each',但每三个对象执行不同的操作
- 当前对象属性作为同一对象中不同属性的值
- 根据对象的不同,在转换对象时考虑旋转
- 如果图像文件存在于不同的驱动器中,如何在js/Jquery中给出图像路径
- Javascript函数内部对象的不同
- Do window.postMessage()适用于不同服务器上的不同应用程序
- 如何在不重写现有代码的情况下将jquery代码应用于不同的目标
- 传递事件和此对象到不同范围内的函数