javascript - 试图找出如何使用“this”来处理单个菜单项
问题描述
我想要做的是使用“this”(如数组)记录结果,以便每当我单击第一个列表项时,数字 0 都会记录在 console.log 中,没有预定义的变量并且只使用一个函数。
<ul class="menuList">
<li><a class="menuImage" onclick="openMenuItemAll();"><button>›</button>Chicken Cordon Bleu</a></li>
<li><a class="menuImage" onclick="openMenuItemAll();"><button>›</button>Chicken Stir Fry</a></li>
<li><a class="menuImage" onclick="openMenuItemAll();"><button>›</button>Chicken Thighs</a></li>
<li><a class="menuImage" onclick="openMenuItemAll();"><button>›</button>Fish Fillet</a></li>
<li><a class="menuImage" onclick="openMenuItemAll();"><button>›</button>Lasagna</a></li>
<li><a class="menuImage" onclick="openMenuItemAll();"><button>›</button>Pizza</a></li>
<li><a class="menuImage" onclick="openMenuItemAll();"><button>›</button>Salmon</a></li>
<li><a class="menuImage" onclick="openMenuItemAll();"><button>›</button>Spaghetti</a></li>
</ul>
<script type="text/javascript">
function openMenuItemAll(){
var menuImage = document.querySelectorAll(".menuImage");
console.log(this.menuImage);
}
</script>
当我尝试根据菜单项的位置获取数组编号时,console.log 中出现未定义
解决方案
的值this
取决于函数的调用方式。
事件处理程序函数将this
等于事件处理程序绑定到的元素。
所以onclick="this /* is the element */"
在没有上下文的情况下调用的函数(例如,如果您调用openMenuItemAll();
)this
等于undefined
(除非您未能触发严格模式,在这种情况下它将是window
)。
旁白:<a>
用于链接。如果您没有在任何地方链接,请不要使用它。禁止在链接内放<button>
!
首先,修复您的标记:
<ul class="menuList">
<li><button>›</button>Chicken Cordon Bleu</li>
请注意,链接已删除,我没有转移,class
因为您可以从列表本身的类中推断出它。
然后选择所有按钮:
const buttons = document.querySelector(".menuList button");
然后循环按钮并将您的openMenuItemAll
函数绑定为事件处理程序。
Array.from(buttons).forEach(
button => button.addEventListener("click", openMenuItemAll)
);
推荐阅读
- php - 键“PRIMARY”的重复条目“制造商名称-0”
- javascript - React:.map 方法语句返回未定义
- javascript - React JS TinyMCE Editor(视频上传检索问题)
- php - 如何通过 Ajax 运行我的 php 函数并遍历结果?
- php - 如何使用 Guzzle 发送文件而不将它们加载到内存中
- sql - 如何获取 Hive SQL 中每行的实际数据大小?
- sql - 顺序发生(高级间隙和孤岛问题)
- python - win32com 在没有时区转换的情况下将 Python 日期时间传递给 Excel
- php - 如何使用加密密码登录php
- sql - 查看 SQL Server Integration Services (SSIS) 转换的 SQL