是否有任何方法或解决方法使(全局,如果您希望,但不一定)函数仅可用于DOM元素的内联事件处理程序?
的JavaScript
function forInlineCallsOnly() {
// only callable from inline "on" attributes of DOM elements
};
也就是说,上述函数不能从脚本的其他部分调用,只能来自,例如:
HTML
<a onclick="forInlineCallsOnly();">Click me</a>
使用堆栈跟踪可以实现吗?
注意:这不是关于应该定义事件处理程序的最佳实践的问题。
答案 0 :(得分:2)
我能给出的最佳答案;而且,它不是很好。
<a data-onclick-attach="forInlineCallsOnly">
JS
eventMethodsMap: {
forInlineCallsOnly: function() {
...
}
}
Array.prototype.forEach.call(document.querySelectorAll('[data-onclick-attach]'), function(elem) {
elem.onclick = eventMethodsMap[elem.dataset.onclickAttach];
});
这与Dojo这样的系统大致相同;事件可以在HTML中定义为数据属性,但它们以更自定义的方式连接起来。如果你不想特定于onclick,你可以想出一个更好的查询选择器。
编辑:您可能还希望从onClickAttach
属性中修剪括号,以防人们开始以与onclick
相同的方式对其进行处理。
答案 1 :(得分:-1)
使用来自JavaScript isDOM -- How do you check if a JavaScript Object is a DOM Object?
的isElement函数并将您的代码更新为:
HTML:
<a onclick="forInlineCallsOnly(this);">Click me</a>
JAVASCRIPT:
function forInlineCallsOnly(obj) {
// only callable from inline "on" attributes of DOM elements
if(!isElement(obj)){
return;
}
// Put code you want to allow to run here
};