Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/79.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 将事件处理程序附加到DOM元素_Javascript_Html - Fatal编程技术网

Javascript 将事件处理程序附加到DOM元素

Javascript 将事件处理程序附加到DOM元素,javascript,html,Javascript,Html,我正在做一个井字游戏,它几乎完成了。我唯一想知道的是,是否可以从我的.js文件中为onclick添加事件处理程序,而不是直接从HTML属性调用它。下面是使用onclick的一段HTML: <div id="left"> <div id="board"> <div id="one" onclick="playerMove(this)"> </div> <d

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

<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>

如果您对此事有任何想法,我们将不胜感激。

请尝试:

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); 
      };
}
var board=document.getElementById('board'),
divs=board.getElementsByTagName('div'),
i、 len=分段长度;
对于(i=0;i
试试:

用于绑定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); 
      };
}
var board=document.getElementById('board'),
divs=board.getElementsByTagName('div'),
i、 len=分段长度;
对于(i=0;i
如果您使用jQuery,类似这样的东西应该可以工作:

$(document).ready(function() {
  $('#board div').click(playerMove);
});

如果您使用jQuery,类似这样的功能应该可以工作:

$(document).ready(function() {
  $('#board div').click(playerMove);
});

你应该考虑使用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]);
    };
}

你应该考虑使用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]);
    };
}
使用以下命令:

document.getElementById('element_id').onclick = function(){ playerMove(this); };
对于每个Div,将'element_id'更改为'one','two',…

使用以下命令:

document.getElementById('element_id').onclick = function(){ playerMove(this); };
对于每个Div,将“element_id”更改为“one”、“two”…

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

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

// 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后调用):

或者,要为所有board 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);
    }
}
var divs=document.getElementById(“board”).children;
对于(变量i=0,len=divs.length;i
在普通javascript(无跨平台库)中,可以通过javascript代码(现代浏览器)或
attachEvent
(IE的旧版本)添加事件处理程序

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

// 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后调用):

或者,要为所有board 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);
    }
}
var divs=document.getElementById(“board”).children;
对于(变量i=0,len=divs.length;i
下面五行是您的答案。试试看:)如果有人在新帖子或我的帖子中复制/转换我的代码到j-query,这是受欢迎的,没有问题

var yourDivID = document.getElementById('your_Div_ID');
yourDivID.addEventListener('click', function (){  playerMove(this); }, false);
function playerMove(divElement)
{
    alert(divElement.id);
}
我已经试着把完整的演示放进去,你可以点击九个div中的任何一个来检查它的事件如果链接不起作用,那么你可以检查以下代码(适用于我的WIN7和FireFox)


动态添加事件
函数add\u DivClick\u Events(){
var nodes=document.getElementById('board').childNodes;
对于(var i=0;i
下面五行是您的答案。试试看:)如果有人在新帖子或我的帖子中复制/转换我的代码到j-query,这是受欢迎的,没有问题

var yourDivID = document.getElementById('your_Div_ID');
yourDivID.addEventListener('click', function (){  playerMove(this); }, false);
function playerMove(divElement)
{
    alert(divElement.id);
}
我已经试着把完整的演示放进去,你可以点击九个div中的任何一个来检查它的事件如果链接不起作用,那么你可以检查以下代码(适用于我的WIN7和FireFox)


动态添加事件
函数add\u DivClick\u Events(){
var nodes=document.getElementById('board').childNodes;
对于(var i=0;i
@SnakesandCoffee这取决于op的要求。似乎他想将相同的功能附加到所有divs@SnakesandCoffee更新了。@SnakesandCoffee这取决于op的要求。似乎他想将相同的函数附加到所有divs@Snake