繁体   English   中英

限制调用JavaScript函数以内联DOM元素的事件处理程序

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

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