Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 尝试了解如何使用“解决”来解决单个菜单项;这";_Javascript_Arrays_This_Undefined - Fatal编程技术网

Javascript 尝试了解如何使用“解决”来解决单个菜单项;这";

Javascript 尝试了解如何使用“解决”来解决单个菜单项;这";,javascript,arrays,this,undefined,Javascript,Arrays,This,Undefined,我试图做的是像数组一样使用“this”来记录结果,这样每当我单击第一个列表项时,数字0就会记录在console.log中,没有预定义的变量,并且只使用一个函数 <ul class="menuList"> <li><a class="menuImage" onclick="openMenuItemAll();"><button>&#8250;</button>Chicken Cordon Bleu</a><

我试图做的是像数组一样使用“this”来记录结果,这样每当我单击第一个列表项时,数字0就会记录在console.log中,没有预定义的变量,并且只使用一个函数

<ul class="menuList">
    <li><a class="menuImage" onclick="openMenuItemAll();"><button>&#8250;</button>Chicken Cordon Bleu</a></li>
    <li><a class="menuImage" onclick="openMenuItemAll();"><button>&#8250;</button>Chicken Stir Fry</a></li>
    <li><a class="menuImage" onclick="openMenuItemAll();"><button>&#8250;</button>Chicken Thighs</a></li>
    <li><a class="menuImage" onclick="openMenuItemAll();"><button>&#8250;</button>Fish Fillet</a></li>
    <li><a class="menuImage" onclick="openMenuItemAll();"><button>&#8250;</button>Lasagna</a></li>
    <li><a class="menuImage" onclick="openMenuItemAll();"><button>&#8250;</button>Pizza</a></li>
    <li><a class="menuImage" onclick="openMenuItemAll();"><button>&#8250;</button>Salmon</a></li>
    <li><a class="menuImage" onclick="openMenuItemAll();"><button>&#8250;</button>Spaghetti</a></li>
</ul>
<script type="text/javascript">
    function openMenuItemAll(){
    var menuImage = document.querySelectorAll(".menuImage");
    console.log(this.menuImage);
}
</script>
  • ›;蓝带鸡
  • ›;鸡炒
  • ›;鸡大腿
  • ›;鱼片
  • ›;千层面
  • ›;披萨
  • ›;三文鱼
  • ›;意大利面
函数openMenuItemAll(){ var menuImage=document.querySelectorAll(“.menuImage”); console.log(this.menuImage); }

当我试图根据菜单项的位置获取数组编号时,console.log中没有定义此值取决于函数的调用方式

事件处理程序函数的
值等于事件处理程序绑定到的元素

所以
onclick=“this/*是元素*/”

在没有上下文的情况下调用的函数(例如,如果调用
openMenuItemAll();
)具有
等于
未定义的
(除非您未能触发严格模式,在这种情况下,它将是
窗口


旁白:
用于链接。如果你没有链接到任何地方,就不要使用它。禁止在链接中放置


首先,修复标记:

<ul class="menuList">
    <li><button>&#8250;</button>Chicken Cordon Bleu</li>
然后在按钮上循环并将
openMenuItemAll
函数绑定为事件处理程序

Array.from(buttons).forEach(
    button => button.addEventListener("click", openMenuItemAll)
);

的值取决于函数的调用方式

事件处理程序函数的
值等于事件处理程序绑定到的元素

所以
onclick=“this/*是元素*/”

在没有上下文的情况下调用的函数(例如,如果调用
openMenuItemAll();
)具有
等于
未定义的
(除非您未能触发严格模式,在这种情况下,它将是
窗口


旁白:
用于链接。如果你没有链接到任何地方,就不要使用它。禁止在链接中放置


首先,修复标记:

<ul class="menuList">
    <li><button>&#8250;</button>Chicken Cordon Bleu</li>
然后在按钮上循环并将
openMenuItemAll
函数绑定为事件处理程序

Array.from(buttons).forEach(
    button => button.addEventListener("click", openMenuItemAll)
);

您需要在函数中传递此
onclick=“openMenuItemAll(此);
然后可以从数组中获取目标的索引

也就是说,只要您单击
  • 元素中的任意位置,onclick事件就会发生。如果您只想在单击按钮时触发事件,则需要将事件放在按钮内。由于按钮是li的子项,因此您需要传递
    this.parentElement
    以传递
  • to功能

    <ul class="menuList">
        <li><a class="menuImage" onclick="openMenuItemAll();"><button>&#8250;</button>Chicken Cordon Bleu</a></li>
        <li><a class="menuImage" onclick="openMenuItemAll();"><button>&#8250;</button>Chicken Stir Fry</a></li>
        <li><a class="menuImage" onclick="openMenuItemAll();"><button>&#8250;</button>Chicken Thighs</a></li>
        <li><a class="menuImage" onclick="openMenuItemAll();"><button>&#8250;</button>Fish Fillet</a></li>
        <li><a class="menuImage" onclick="openMenuItemAll();"><button>&#8250;</button>Lasagna</a></li>
        <li><a class="menuImage" onclick="openMenuItemAll();"><button>&#8250;</button>Pizza</a></li>
        <li><a class="menuImage" onclick="openMenuItemAll();"><button>&#8250;</button>Salmon</a></li>
        <li><a class="menuImage" onclick="openMenuItemAll();"><button>&#8250;</button>Spaghetti</a></li>
    </ul>
    <script type="text/javascript">
        function openMenuItemAll(){
        var menuImage = document.querySelectorAll(".menuImage");
        console.log(this.menuImage);
    }
    </script>
    
    此外,由于锚定标记并没有真正用于它的目的,所以可以完全删除它

    在下面的代码片段中,我还删除了列表中的项目符号,因为按钮确实可以替代使用它们的需要

    函数openMenuItemAll(目标){
    const menuImage=document.queryselectoral(“.menuImage”);
    const index=Array.prototype.indexOf.call(menuImage,target)
    控制台日志(索引);
    }
    .menuImage{
    列表样式:无;
    }
    • &#鸡蓝线
    • &#鸡炒
    • ›;鸡大腿
    • ›;鱼片
    • &#烤宽面条
    • &#比萨饼
    • &#鲑鱼
    • &#意大利面

    您需要在函数中传递
    onclick=“openMenuItemAll(此)
    然后可以从数组中获取目标的索引

    也就是说,只要单击
  • 元素中的任意位置,onclick事件就会发生。如果只希望在单击按钮时触发事件,则需要将事件放在按钮内。由于按钮是li的子项,因此需要传递
    this.parentElement
    以将
  • 传递给函数

    <ul class="menuList">
        <li><a class="menuImage" onclick="openMenuItemAll();"><button>&#8250;</button>Chicken Cordon Bleu</a></li>
        <li><a class="menuImage" onclick="openMenuItemAll();"><button>&#8250;</button>Chicken Stir Fry</a></li>
        <li><a class="menuImage" onclick="openMenuItemAll();"><button>&#8250;</button>Chicken Thighs</a></li>
        <li><a class="menuImage" onclick="openMenuItemAll();"><button>&#8250;</button>Fish Fillet</a></li>
        <li><a class="menuImage" onclick="openMenuItemAll();"><button>&#8250;</button>Lasagna</a></li>
        <li><a class="menuImage" onclick="openMenuItemAll();"><button>&#8250;</button>Pizza</a></li>
        <li><a class="menuImage" onclick="openMenuItemAll();"><button>&#8250;</button>Salmon</a></li>
        <li><a class="menuImage" onclick="openMenuItemAll();"><button>&#8250;</button>Spaghetti</a></li>
    </ul>
    <script type="text/javascript">
        function openMenuItemAll(){
        var menuImage = document.querySelectorAll(".menuImage");
        console.log(this.menuImage);
    }
    </script>
    
    此外,由于锚定标记并没有真正用于它的目的,所以可以完全删除它

    在下面的代码片段中,我还删除了列表中的项目符号,因为按钮确实可以替代使用它们的需要

    函数openMenuItemAll(目标){
    const menuImage=document.queryselectoral(“.menuImage”);
    const index=Array.prototype.indexOf.call(menuImage,target)
    控制台日志(索引);
    }
    .menuImage{
    列表样式:无;
    }
    • › 奶酪火腿鸡排
    • › 鸡炒
    • › 鸡大腿
    • › 鱼片
    • › 烤宽面条
    • › 披萨
    • › 鲑鱼
    • › 意大利面

    • 代码>

      昆廷有您的答案,但也考虑使代码更可扩展:

      window.onload=function(){
      document.querySelector('ul')。addEventListener('click',showIndex,false);
      }
      函数显示索引(evt){
      设tgt=evt.target;
      让btns=this.querySelectorAll('button');
      
      对于(i=0,ILN=BTNS长度;i < P>昆廷有你的答案,但也考虑使T