0

我正在开发一款井字游戏,几乎完成了。我唯一想知道的是是否可以onclick从我的 .js 文件中添加事件处理程序,而不是直接从 HTML 属性调用它。这是使用的 HTML 位onclick

<div id="left">
        <div id="board">
            <div id="one" onclick="playerMove(this)">

            </div>
            <div id="two" onclick="playerMove(this)">

            </div>
            <div id="three" onclick="playerMove(this)">

            </div>
            <div id="four" onclick="playerMove(this)">

            </div>
            <div id="five" onclick="playerMove(this)">

            </div>
            <div id="six" onclick="playerMove(this)">

            </div>
            <div id="seven" onclick="playerMove(this)">

            </div>
            <div id="eight" onclick="playerMove(this)">

            </div>
            <div id="nine" onclick="playerMove(this)">

            </div>
        </div>
    </div>

对此事的任何想法将不胜感激。

4

6 回答 6

2

如果你使用 jQuery,这样的东西应该可以工作:

$(document).ready(function() {
  $('#board div').click(playerMove);
});
于 2012-09-30T05:59:15.767 回答
2

在纯 javascript(无跨平台库)中,事件处理程序可以通过带有addEventListener(现代浏览器)或attachEvent(旧版本 IE)的 javascript 代码添加。

这是一个以跨浏览器方式添加事件处理程序的简单函数:

// add event cross browser
function addEvent(elem, event, fn) {
    if (elem.addEventListener) {
        elem.addEventListener(event, fn, false);
    } else {
        elem.attachEvent("on" + event, function() {
            // set the this pointer same as addEventListener when fn is called
            return(fn.call(elem, window.event));   
        });
    }
}

示例用法(在页面 DOM 加载后调用):

addEvent(document.getElementById("one"), 'click', playerMove);

或者,要为所有板 div 安装事件处理程序,您可以这样做:

var divs = document.getElementById("board").children;
for (var i = 0, len = divs.length; i < len; i++) {
    // element nodes only
    if (divs[i].nodeType === 1) {
        addEvent(divs[i], 'click', playerMove);
    }
}
于 2012-09-30T06:01:05.463 回答
1

你真的应该考虑为此使用 jQuery。如果您使用的是 jQuery,这将非常简单:

$('#board > div').click(playerMove);

如果你想坚持使用 vanilla JS,你可以这样做:

var items = document.getElementById('board').children;
for(x in items) {
    items[x].onclick = function() {
        playerMove(items[x]);
    };
}
于 2012-09-30T06:00:55.220 回答
0

尝试:

document.getElementById('one').onclick();

用于在 js 文件中绑定事件处理程序:

var board = document.getElementById('board'),
      divs = board.getElementsByTagName('div'),
      i, len = divs.length;
for (i = 0; i < len; i++) {
      divs[i].onclick = function() {
           playerMove(this); 
      };
}
于 2012-09-30T05:58:33.437 回答
0

用这个:

document.getElementById('element_id').onclick = function(){ playerMove(this); };

对于每个 Div,将 'element_id' 更改为 'one'、'two'、...

于 2012-09-30T06:01:00.857 回答
0

您的答案在以下 5 行中。试试看 :) 如果有人在新帖子或我的帖子中复制/转换我的代码到 j-query,那是受欢迎的,没有问题。

var yourDivID = document.getElementById('your_Div_ID');
yourDivID.addEventListener('click', function (){  playerMove(this); }, false);
function playerMove(divElement)
{
    alert(divElement.id);
}

我试图在 jsfiddle.net 上放完整的演示,如果链接不起作用,您可以单击九个中的任何一个 div 来检查其事件,然后您可以检查以下代码(适用于我 WIN7 和 FireFox)

<html>
<head>
<title> Add Events Dynamically </title>
<script type="text/javascript">
    function add_DivClick_Events() {
        var nodes = document.getElementById('board').childNodes;
        for (var i = 0; i < nodes.length; i++) {
            if (i % 2 == 1) {
                nodes[i].addEventListener('click', function () {
                    playerMove(this);
                }, false);
            }
        }    
    }
    function playerMove(divElement)
    {
        alert(divElement.id);
    }  
    </script>
    <style type="text/css">
    #board div
    {
        width:20px;
        height:20px;
        border:2px solid;        
    }
    </style>
</head>
     <body onload='add_DivClick_Events()'>   
        <div id="left">
        <div id="board">
            <div id="one">

            </div>
            <div id="two">

            </div>
            <div id="three">

            </div>
            <div id="four">

            </div>
            <div id="five">

            </div>
            <div id="six">

            </div>
            <div id="seven">

            </div>
            <div id="eight">

            </div>
            <div id="nine">

            </div>
        </div>
    </div>
    </body>    
 </html>
于 2012-09-30T06:56:47.223 回答