[英]Can I create my own event attributes?
我可以在被视为JavaScript代码的HTML元素上创建自己的属性,并在需要时执行该属性吗?
例如,假设我想创建一个自定义事件onpagerefresh
,同时允许编写HTML的人添加处理该事件的属性。
<body onpagerefresh="updateContents()">
我能够解析HTML以获取此新的onpagerefresh
属性的值,但是如何告诉JavaScript将此属性中的任何内容视为JavaScript代码而不是字符串?
您可以使用new Function()
( 函数构造函数)从字符串中获取函数对象,然后将其分配给对象的属性。 例如:
var divElement = document.getElementById('mydiv');
divElement.onpagerefresh = new Function("èvent", "alert();");
是否在任何有意义的方式上都优于eval()尚待商does(尽管它确实为您提供了独特的范围),但这将是您的方式。 在您的情况下,可能更好的选择是允许实现HTML的人使用预先存在的函数名( onpagerefresh="updateContents"
),然后简单地将其执行为例如window["updateContents"]()
。 这样,您就不会让任何旧的DOM插入将随机javascript写入代码中。 但这当然会限制功能。
如果您想创建一个实际事件并支持侦听器,则此Mozilla文章介绍了一种方法:
https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events
在您的情况下:
var event = new Event('onpagerefresh');
// Listen for the event.
elem.addEventListener('onpagerefresh', function (e) {
updateContents();
}, false);
// Dispatch the event.
elem.dispatchEvent(event);
不过,请注意跨浏览器的支持。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.