为什么这个地方onclick事件没有被触发?如果是jquery中这样可以得到当前点击的这个li的dom对象,那JS种不能这样使用吗?
$(document).ready(function(){
$("ul li").click(function(){
console.log($(this));//打印出当前被点击的li的jquery对象
console.log(this);//打印出当前被点击的li的dom对象
});
});
window.onload = function(){
var lis = document.getElementsByTagName("li");
lis.onclick = function(){
console.log("111");
console.log(this);
}
}
修改:
window.onload = function(){
var lis = document.getElementsByTagName("li");
Array.from(lis).forEach(function(el) {
console.log("111");
console.log(this);
})
}
谢谢各位,之前都用jquery,现在重新看看js发现了很多问题。这种低级错误以后不会再犯了,印象深刻 ^_^ 。
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
不是
this的原因。onclick是 DOM 的事件。但是此时的lis根本就不是 dom,而是 DOM 的集合。jQuery 之所以可以处理,是因为
$("ul li")返回的是 jQuery 对象,当在其上面调用 click 函数时,jQuery 会隐式的使用循环。虽然
lis很像数组,但是却不是数组。因此可以使用Array.from函数把它变成真正的数组。试试不要用.onclick()写点击事件;用addEventListener('click',function(){console.log(this)});添加点击事件看看能不能触发,我怀疑是因为你拿到lis是一个数组 onclick是不是因为这个原因不行了
第二段代码写的不对, lis 是一个数组,不是 dom 对象,所以设置 onclick 没用
改成这样
直接用
getElementsByClassName这个方法吧,把getElementsByTagName封装了一下可以作为dom操作