将内联事件处理程序移动到chrome扩展的javascript工作表
Moving inline event handlers to javascript sheet for chrome extension
我正在创建一个井字游戏的chrome扩展。然而,我的html代码有内联事件处理程序,由于内容安全性的原因,这些处理程序是不允许的。我需要弄清楚如何将这些事件处理程序转移到javascript页面。
这是HTML页面,内联事件处理程序在按钮中,它们调用函数gamestart:
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<link href="game.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="singleplayer.js"></script>
</head>
<body>
<center><u><h1>Single Player Mode</h1></u>
<table> <tr><td>
<button style="background-color:lightblue ; color: black" id="0" onclick = "gamestart(0)">
</button></td>
<td>
<button style="background-color:lightblue ; color: black" id="1" onclick = "gamestart(1)">
</button>
</td><td>
<button style="background-color:lightblue ; color: black" id="2" onclick = "gamestart(2)">
</button>
</td></tr>
<tr><td>
<button style="background-color:lightblue ; color: black" id="3" onclick = "gamestart(3)">
</button>
</td><td>
<button style="background-color:lightblue ; color: black" id="4" onclick = "gamestart(4)">
</button>
</td><td>
<button style="background-color:lightblue ; color: black" id="5" onclick = "gamestart(5)">
</button>
</td></tr><tr><td>
<button style="background-color:lightblue ; color: black" id="6" onclick = "gamestart(6)">
</button>
</td><td>
<button style="background-color:lightblue ; color: black" id="7" onclick = "gamestart(7)">
</button>
</td><td>
<button style="background-color:lightblue ; color: black" id="8" onclick = "gamestart(8)">
</button>
</td></tr></table></center>
</body>
</html>
在javascript表上,这里是使用事件处理程序调用的函数:
var counter=0;
function gamestart(id){
console.log(id);
counter=counter+2
if(counter%1==0){
document.getElementById(id).innerHTML = "X";
checkX("X");
stopbutton("X");
setTimeout('player2()',500);
checktie();
}
}
document.onclick = function (event) {
if (event.target.nodeName === 'BUTTON') {
gamestart(event.target.id);
}
}
您可以在这些行中执行某些操作。
使用addEventListener
附加事件,并使用getElementsByTagName
属性定位元素
var elem = document.getElementsByTagName('button'),
counter = 0;
for(var i=0;i< elem.length;i++) {
elem[i].addEventListener('click', gamestart);
}
function gamestart(e){
var id = this.id;
console.log(id);
counter=counter+2
if(counter%1==0){
document.getElementById(id).innerHTML = "X";
checkX("X");
stopbutton("X");
setTimeout('player2()',500);
checktie();
}
检查Fiddle
另外,将内联样式分离出来并将它们放在类中也是一种很好的做法。
.highlight {
background-color:lightblue;
color: black
}
按钮的HTML
看起来像这个
<button class="highlight" id="1">Button 1</button>
漂亮干净,只保留了元素的结构、功能和风格。
现在,您甚至可以基于类瞄准元素
var elem = document.getElementsByClassName('highlight')
相关文章:
- 扩展 JavaScript Promise 时出错
- 扩展 JavaScript 标准类型陷阱
- 使用默认函数扩展 JavaScript 对象
- 如何用模块模式扩展javascript中的事件委派
- 为什么我的firefox扩展javascript不能访问opener窗口,也看不到window.name
- 用原型扩展Javascript Form对象
- 在HTML中扩展JavaScript变量
- 如何扩展Javascript原型
- Chrome 扩展:Javascript 未加载
- 通过打字稿类扩展 JavaScript 对象原型
- 如何使用 _.extend 或 $.extend 扩展 javascript 对象以包含方法
- 扩展 Javascript 类和继承
- 为什么 CVS 会扩展 JavaScript 调用
- 如何在没有JSHint问题的情况下扩展javascript字符串
- 在对象实例化期间扩展 JavaScript 对象
- 如何通过插件扩展JavaScript库
- 使用参数扩展 JavaScript 函数
- 扩展 javascript 对象及其属性
- Chrome 扩展/Javascript 问题
- 扩展 JavaScript 对象