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