我有两个cat 的图像,当我单击第一个图像时,第一个图像的指针应该从pointer切换到none.

let elements = document.querySelectorAll('.cat');
for (var i = 0; i < elements.length; i++) {

    if (i == 0) {
        elements[i].addEventListener('click', function(event) {
            console.log('Cursor switched');
            document.getElementsByClassName('cat')[0].style.pointerEvents = 'none';
        });
    }

}
.cat {
    height: 100px;
    cursor: pointer;
}
<img class="cat" src="https://i.pinimg.com/564x/c7/83/16/c78316ef3e89429ff0f3dad0265d0da8.jpg">
<img class="cat" src="https://i.pinimg.com/564x/c7/83/16/c78316ef3e89429ff0f3dad0265d0da8.jpg">

它起作用了.但我的问题是,为什么我不能使用document.getElementsByClassName('cat')[i]而不是document.getElementsByClassName('cat')[0],或者我应该使用完全不同的代码呢?

推荐答案

这是因为在Java脚本中使用了closures.无论何时定义函数,也就是本例中附加在事件侦听器上的函数,它都会记住该函数的作用域.要进行修复,您可以使用let i,它是词法作用域

let elements = document.querySelectorAll('.cat');
for (let i = 0; i < elements.length; i++) {

    if (i == 0) {
        elements[i].addEventListener('click', (event) => {
            console.log('Cursor switched');
            document.getElementsByClassName('cat')[i].style.pointerEvents = 'none';
        });
    }

}
.cat {
    height: 100px;
    cursor: pointer;
}
<img class="cat" src="https://i.pinimg.com/564x/c7/83/16/c78316ef3e89429ff0f3dad0265d0da8.jpg">
<img class="cat" src="https://i.pinimg.com/564x/c7/83/16/c78316ef3e89429ff0f3dad0265d0da8.jpg">

Javascript相关问答推荐

React Hooks中useState的同步问题

我不知道为什么我的JavaScript没有验证我的表单

使用useup时,React-Redux无法找到Redux上下文值

Javascript,部分重排序数组

. NET中Unix时间转换为日期时间的奇怪行为

JQuery. show()工作,但. hide()不工作

Snowflake JavaScript存储过程返回成功,尽管预期失败

Promise Chain中的第二个useState不更新

try 使用javascript隐藏下拉 Select

在使用位板时,如何在Java脚本中判断Connect 4板中中柱的对称性?

使用getBorbingClientRect()更改绝对元素位置

获取';无法解决导入和导入";slick-carousel/slick/slick-theme.css";';错误

回溯替代方式

使用Ace编辑器对子组件实例的native-element 进行Angular 获取时面临的问题

如何使用<;Link>;执行与JS Reaction中的";window.Location=/GameOverDied;";类似的操作?

是否可以将异步调用与useState(UnctionName)一起使用

如何修复使用axios运行TSC index.ts时出现的错误?

如何根据查询结果重新排列日期

我无法在Api Reaction本机上发出GET请求

如何动态呈现适合未知屏幕大小的最大数量的表行?苗条的