Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 此.element的最近()无法正常工作_Javascript - Fatal编程技术网

Javascript 此.element的最近()无法正常工作

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

我有一个这样的HTML。:当我点击标签

    这是剧本

    <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{
    内容:属性(数据颜色)
    }
    红色分区{
    背景颜色:红色
    }
    格林分区{
    背景颜色:绿色
    }
    蓝色分区{
    背景颜色:蓝色
    }
    
    

    不需要做任何你正在做的事情。请告诉我最好的方法。你有一个生命来防止污染全局名称空间,但你想使用primitive
    onclick
    ,它需要全局名称空间函数。使用
    addEventListener
    代替!谢谢!不需要做任何你想做的事情你正在这样做。请告诉我正确工作的最佳方法。你有一个防止污染全局名称空间的生活,但你想使用primitive
    onclick
    ,它需要全局名称空间函数。使用
    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的返回值)