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

时间:2014-04-11 00:57:53

标签: javascript html javascript-events

我可以在被视为JavaScript代码的HTML元素上创建自己的属性,并且能够在我的代码需要时执行吗?

例如,假设我要创建自定义事件onpagerefresh,同时允许编写HTML的人添加处理此事件的属性。

<body onpagerefresh="updateContents()">

我能够解析HTML以获取此新onpagerefresh属性的值,但是如何告诉JavaScript将此属性中的任何内容视为JavaScript代码而不是字符串?

2 个答案:

答案 0 :(得分:1)

您可以使用new Function() function constructor从字符串中获取函数对象,然后将其指定给对象的属性。例如:

var divElement = document.getElementById('mydiv');
divElement.onpagerefresh = new Function("èvent", "alert();");

这是否比eval()以任何有意义的方式更好都是值得商榷的(尽管它确实给你一个不同的范围),但这就是你如何做到的。在您的情况下,可能更好的选择是允许实现HTML的人使用预先存在的函数名称(onpagerefresh="updateContents"),然后简单地执行那个例如window["updateContents"]()。这样你就不会让任何旧的DOM插入在你的代码中写入随机的javascript。但当然这限制了功能。

答案 1 :(得分:0)

如果你想创建一个伴随着对听众的支持的实际事件,这篇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);

但是,请注意跨浏览器支持。