繁体   English   中英

我可以创建自己的事件属性吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM