多个类上的Javascript onclick事件处理程序
Javascript onclick event handler on multiple classes
当我有多个类时,如何单击类名并调用函数?在我的代码中,我有9个类框,每次点击一个,我都想调用一个函数。
<!DOCTYPE html>
<html>
<head>
<title>Tic Tac Toe Game</title>
<style>
* {
margin: 0;
padding: 0;
}
#container {
width: 303px;
margin: 0 auto;
margin-top: 40px;
}
h1 {
text-align: center;
margin-bottom: 15px;
}
/*#wrapper {
margin: 0 auto;
}*/
.col {
float: left;
margin: 0 auto;
}
.col > div:nth-child(-n+1) {
border-bottom: 1px solid #000;
}
.col > div:nth-child(-n+2) {
border-bottom: 1px solid #000;
}
.col > div {
border-right: 1px solid #000;
}
.col:last-child {
border-right: none;
border: 1px solid red;
}
#wrapper.col * {
border-right: none;
}
.reset {
clear: both;
}
.box {
width: 100px;
height: 100px;
background-color: grey;
font-size: 80px;
text-align: center;
}
body {
font-size: 80%;
}
</style>
</head>
<body>
<div id="container">
<h1>Tic Tac Toe</h1>
<div id="wrapper">
<div class="col">
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
</div>
<div class="col">
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
</div>
<div class="col">
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
</div>
<div class="reset"></div>
</div>
</div>
<script>
var turnsArray = [];
function player() {
alert("hello");
}
var el = document.getElementsByClassName('box');
el.onclick = player;
</script>
</body>
</html>
getElementsByClassName返回HTMLCollection,而不是单个元素,因此不能直接将事件处理程序附加到它
您需要迭代这个集合,并为每个元素设置事件事件处理程序:
items = document.getElementsByClassName('box');
[].forEach.call(items, function (el) {
el.addEventListener('click', player);
});
HTMLCollection不是一个合适的数组,所以你不能直接在它上调用forEach方法,但你可以在数组上调用forEach并将集合传递给它。
[]。slice用于将调用结果转换为新数组。因此,您可以使用forEach
。
var el = document.getElementsByClassName('box');
el_arr = [].slice.call(el);
el_arr.forEach(function(obj,i){
obj.addEventListener("click",function(){
player();
});
});
el
给出了一个HTMLCollection,所以你需要在每个上迭代并设置onclick监听器,在ES6中,你可以简单地通过[...el]
将HTMLCollection转换为数组,所以代码变成:
var el = document.querySelectorAll('.box');
[...el].forEach(e => e.onclick = player)
Fiddle演示
相关文章:
- 如何向onClick事件处理程序传递一个接受参数的函数,并且仍然将该函数绑定到组件's”;这个“;上下文
- 多个类上的Javascript onclick事件处理程序
- 在这种情况下使用onclick事件处理程序可以接受吗
- 加载文档时的HTML onClick事件处理
- 使用 RequireJS 和 JQuery onclick 事件处理“this”
- 似乎未调用 Onclick 事件处理程序
- 为什么当同级节点的“display”属性发生更改时,React 组件的 onClick 事件处理程序不会触发
- 链接到boostrap的Javascript代码会阻止onclick事件处理程序运行
- onClick 事件处理程序不会触发
- 如何将简单的 onClick 事件处理程序添加到画布元素
- anchor标记(一个标记)onclick事件处理程序不工作
- 用符合内容安全策略的代码替换多个内联按钮onclick事件处理程序
- 我必须点击两次,为什么?(JavaScript onclick事件处理程序)
- 为什么游标、不透明属性和onclick事件处理程序在IE9上不起作用
- onClick事件处理程序在加载时调用,而不是在单击时调用
- 如何使用javascript onclick事件处理程序同一类锚元素
- 为视频添加onclick事件处理程序是行不通的
- 当onclick事件处理机制启动时,为什么不调用第二个函数?
- 如何使用JQuery将onclick事件处理程序添加到锚标记
- sedragon自定义控件,带有onClick事件处理程序:IE中的问题