使 HTML 元素从自定义对象继承事件
Make HTML element inherit events from custom object
在我正在工作的网页中,我有很多小图像要分配相同的事件集。与其一个接一个地添加它们,我认为如果我能让这种类型的元素继承这些事件会更优雅。
我想到的是这样的:
function InheritEvents(){};
InheritEvents.prototype.onmouseover = function(){...action a..};
InheritEvents.prototype.onmouseout = function(){...action b..};
var temp = originalHTMLElement.constructor; //(in this case img)
originalHTMLElement.prototype = new InheritEvents();
originalHTMLElement.constructor = temp;
a) 我不是打扰了原来的HTML吗?
b) 是否可以命名自定义对象属性,例如 ".onmouseover"就像经典方式一样: originalHTMLElement.onmouseover = function()... ?
c) 更具概念性:是否可以将自定义对象与 HTML 混合 elemenst/DOM nodes ?
我强烈建议不要这样做。无论如何,它可能都行不通,但一般来说,弄乱主机对象的原型是一个坏主意。
我认为遍历目标元素并将事件附加到它们应该没有问题,但如果你不喜欢这样,你可以使用事件委托:
window.onload = function() {
document.getElementById("images").onclick = function(e) {
if (e.target && e.target.classList.contains("clickable")) {
e.stopPropagation();
console.log("I've been clicked!");
}
}
}
#images div {
width: 40px;
height: 40px;
float: left;
margin: 5px;
background-color: blue;
}
#images div.clickable {
background-color: red;
}
#images + * {
clear: both;
}
<div>
<div id="images">
<!-- Pretend that these DIVs are your images -->
<div></div>
<div class="clickable"></div>
<div></div>
<div></div>
<div class="clickable"></div>
</div>
<div>
Click one of the red images above
</div>
</div>
当然,如果您使用的是 jQuery,.on()
方法可以在一行中处理"将事件处理程序添加到集合的所有成员"选项和事件委托选项。
相关文章:
- JavaScript对象继承问题
- 我的Javascript对象继承自什么
- javascript对象继承-子类和超类
- 向扩展数组的JS集合添加对象(继承?)
- 使 HTML 元素从自定义对象继承事件
- 如何从“构造函数返回另一个对象”对象继承
- 在 Ember.js 中,如何使用 super() 遍历对象继承树
- 如何实现 JavaScript 对象继承
- Javascript 对象继承
- 使用jquery的函数对象继承's延伸
- 是否可以从javascript函数对象继承
- 从数组中的对象继承/调用函数
- 如何强制javascript数组从我的自定义对象继承
- 为什么不't我的对象继承了keys函数
- JavaScript中的对象继承
- 通过clone()实现对象继承是如何工作的
- 原型继承为什么子对象不从父对象继承方法
- 从Error对象继承-其中是消息属性
- JavaScript对象继承问题
- 对象继承