簡體   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