[英]Restrict calling a JavaScript function to inline event handlers of DOM elements
是否有任何方法或解决方法使(如果需要,但不一定是全局的)函数仅可用于DOM元素的内联事件处理程序?
的JavaScript
function forInlineCallsOnly() {
// only callable from inline "on" attributes of DOM elements
};
也就是说,不应仅从例如以下命令中从脚本的其他部分调用上述函数:
的HTML
<a onclick="forInlineCallsOnly();">Click me</a>
使用堆栈跟踪是否有可能?
注意:这不是关于在哪里定义事件处理程序的最佳实践的问题。
我能给出的最佳答案; 哎呀,那不是很好。
<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
属性中onClickAttach
括号,以防人们开始将其与onclick
一样对待。
使用以下代码中的isElement函数: JavaScript isDOM-如何检查JavaScript对象是否为DOM对象?
并将您的代码更新为:
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
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.