Javascript 此.element的最近()无法正常工作
我有一个这样的HTML。:当我点击标签Javascript 此.element的最近()无法正常工作,javascript,Javascript,我有一个这样的HTML。:当我点击标签 这是剧本 <script> (() =>{ const a = document.querySelectorAll('a'); for(let i=0; i<a.length; i++){ a[i].setAttribute('onclick', `handleClick('${a[i].getAttribute('data-co
这是剧本
<script>
(() =>{
const a = document.querySelectorAll('a');
for(let i=0; i<a.length; i++){
a[i].setAttribute('onclick', `handleClick('${a[i].getAttribute('data-color')}', '${a[i].nodeName}')`);
}
handleClick = (color, selector) => {
document.querySelector(selector).closest('.container').style.backgroundColor = color;
}
})()
</script>
(() =>{
const a=document.querySelectorAll('a');
for(设i=0;i{
document.querySelector(selector).closest('.container').style.backgroundColor=color;
}
})()
您应该使用.addEventListener()
添加事件处理程序,并且处理程序应该是函数,而不是字符串:
(() => {
const a = document.querySelectorAll("a");
for (let i = 0; i < a.length; ++i) {
a[i].addEventListener("click", function() {
this.closest(".container").style.backgroundColor = this.getAttribute("data-color");
});
}
})();
(()=>{
常量a=document.queryselectoral(“a”);
for(设i=0;i
您还可以使用委派设置来完成此操作,这样您可以在文档级别处理“单击”,并在事件目标与
”匹配时将其分派给颜色更改器。容器a“
(或任何可用的容器)。您应该使用添加事件处理程序。addEventListener()
,并且处理程序应该是函数,而不是字符串:
(() => {
const a = document.querySelectorAll("a");
for (let i = 0; i < a.length; ++i) {
a[i].addEventListener("click", function() {
this.closest(".container").style.backgroundColor = this.getAttribute("data-color");
});
}
})();
(()=>{
常量a=document.queryselectoral(“a”);
for(设i=0;i
您还可以通过委派设置来完成此操作,这样您可以在文档级别处理“单击”,并在事件目标与
”匹配时将其分派给颜色更改器。容器a“
(或任何有效的工具).您将颜色传递给事件处理程序,使其过于复杂。您使用的是数据属性,因此只需在单击元素时读取即可
(()=>{
常量handleClick=evt=>{
//停止点击
evt.preventDefault()
//得到颜色
const color=evt.target.dataset.color
//引用容器元素
const wrapper=evt.target.closest(“.container”)
//清洁班
wrapper.classList.remove('red'、'green'、'blue')
//为单击的内容设置类
wrapper.classList.add(颜色)
}
const archors=document.queryselectoral('a');
anchors.forEach(a=>a.addEventListener('click',handleClick))
})()
a:after{
内容:属性(数据颜色)
}
红色分区{
背景颜色:红色
}
格林分区{
背景颜色:绿色
}
蓝色分区{
背景颜色:蓝色
}
-
-
-
-
-
-
-
-
-
将颜色传递给事件处理程序会使其过于复杂。您使用的是数据属性,因此在单击元素时只需读取它即可
(()=>{
常量handleClick=evt=>{
//停止点击
evt.preventDefault()
//得到颜色
const color=evt.target.dataset.color
//引用容器元素
const wrapper=evt.target.closest(“.container”)
//清洁班
wrapper.classList.remove('red'、'green'、'blue')
//为单击的内容设置类
wrapper.classList.add(颜色)
}
const archors=document.queryselectoral('a');
anchors.forEach(a=>a.addEventListener('click',handleClick))
})()
a:after{
内容:属性(数据颜色)
}
红色分区{
背景颜色:红色
}
格林分区{
背景颜色:绿色
}
蓝色分区{
背景颜色:蓝色
}
-
-
-
-
-
-
-
-
-
不需要做任何你正在做的事情。请告诉我最好的方法。你有一个生命来防止污染全局名称空间,但你想使用primitiveonclick
,它需要全局名称空间函数。使用addEventListener
代替!谢谢!不需要做任何你想做的事情你正在这样做。请告诉我正确工作的最佳方法。你有一个防止污染全局名称空间的生活,但你想使用primitiveonclick
,它需要全局名称空间函数。使用addEventListener
代替!谢谢!谢谢!如果我设置一个新的链接来制作动画,该怎么办e看起来像这样:document.querySelector('a[class=animate]).addEventListener('click',function(){setInterval(function(){a[i].click()},2000)}
?@31113是的,您可以这样做,尽管您可能希望保存间隔计时器标识(来自setInterval()
的返回值)所以你可以稍后停止计时器。谢谢@Pointy!谢谢!如果我设置一个新的链接来制作动画该怎么办。它应该是这样的:document.querySelector('a[class=animate])。addEventListener('click',function(){setInterval(function(){a[I].click()},2000)}
?@31113是的,您可以这样做,但您可能希望保存间隔计时器标识(来自setInte的返回值)