在 javascript 中添加事件处理程序的位置
Where to add an event handler in javascript?
我有一个javascript代码,可以创建一个随机的5个图像,将其分配给div节点,然后克隆该节点并填充另一个div节点。
var numberOffaces = 5;
var theLeftSide = document.getElementById("leftSide");
var theRightSide = document.getElementById("rightSide");
var theBody = document.getElementsByTagName("body")[0];
function generateFaces() {
for (var i = 0; i < numberOffaces; i++) {
var imgNode = document.createElement("IMG");
imgNode.src = "http://home.cse.ust.hk/~rossiter/mooc/matching_game/smile.png";
imgNode.style.top = Math.floor(Math.random() * 400) + "px";
imgNode.style.left = Math.floor(Math.random() * 400) + "px";
theLeftSide.appendChild(imgNode);
}
var leftSideImages = theLeftSide.cloneNode(true);
leftSideImages.removeChild(leftSideImages.lastChild);
theRightSide.appendChild(leftSideImages);
}
//add event handler
theLeftSide.lastChild.onclick =
function nextLevel(event) {
event.stopPropagation();
numberOfFaces += 5;
generateFaces();
};
当我运行这段代码时,我得到 onclick = null,并且代码无法按预期工作,我是 javascript 的新手,不知道将我的事件处理程序放在哪里。我需要做的是,每当我单击div 的最后一个子节点时,我都会触发 onclick 事件。
克隆节点会复制其所有属性及其值,包括内部(内联(侦听器。它不会复制使用 addEventListener(( 添加的事件侦听器或分配给元素属性的事件侦听器。(例如 node.onclick = fn( [参考]
要么使用onclick
内联句柄( attribute
(,要么每次附加元素时都使用onclick
。
var numberOffaces = 5;
var theLeftSide = document.getElementById("leftSide");
var theRightSide = document.getElementById("rightSide");
var theBody = document.getElementsByTagName("body")[0];
function generateFaces() {
for (var i = 0; i < numberOffaces; i++) {
var imgNode = document.createElement("IMG");
imgNode.src = "http://home.cse.ust.hk/~rossiter/mooc/matching_game/smile.png";
imgNode.style.top = Math.floor(Math.random() * 400) + "px";
imgNode.style.left = Math.floor(Math.random() * 400) + "px";
theLeftSide.appendChild(imgNode);
}
var leftSideImages = theLeftSide.cloneNode(true);
leftSideImages.removeChild(leftSideImages.lastChild);
theRightSide.appendChild(leftSideImages);
doAddEvent();
}
//add event handler
function doAddEvent() {
theLeftSide.lastChild.onclick =
function nextLevel(event) {
event.stopPropagation();
numberOfFaces += 5;
generateFaces();
};
}
doAddEvent();
正如阿德尼奥所建议的那样,Event Delegation
会有所帮助!事件委派允许您避免将事件侦听器添加到特定节点; 相反,事件侦听器将添加到一个父级。 该事件侦听器分析冒泡事件以查找子元素的匹配项。
相关文章:
- 引导程序:在导航栏中,显示悬停在单个位置的基于Li Link的不同内容
- 如何通过谷歌应用程序脚本从谷歌文档中的位置确定命名范围
- 我可以't使用jQuery更改工具提示引导程序的位置
- 将Rails后端添加到JS/HTML/CSS应用程序时,正确的文件位置是什么
- 如何获取node.js系统CLI应用程序的位置
- 单击链接时如何将引导程序转盘旋转到特定位置
- 流星应用程序中的按钮位置错误
- 在Web应用程序中绑定API和模板路由的位置
- 地理位置不适用于苹果移动网络应用程序功能
- 在 javascript 中添加事件处理程序的位置
- 如何确保元素的位置在引导程序2中是固定的
- 允许HTML5 web应用程序在浏览器关闭时访问位置'以t为中心(iOS)
- 从Web应用程序发送地理位置,即使选项卡不在焦点上
- 如何使用硒铬驱动程序处理地理位置弹出窗口
- 如何处理 Backbone .js应用程序中哈希更改的滚动位置
- 如何定位“隐藏”的 iframe?(应用程序:链接到嵌入“隐藏的海报图像”嵌入的 Youtube 视频的起始位置)
- 如何本地化节点.js应用程序,每个区域设置具有不同的单词位置,混合静态和动态本地化文本
- 基于 Web 的应用程序是否有可能以某种方式访问智能手机的位置?并报告回来
- 具有超时的地理位置会导致错误处理程序被调用两次
- 如何修复未知提供程序:位置提供程序