从html文件调用Javascript函数

Mil*_*adi 4 html javascript function

我有这个JavaScript代码:

var cr = {};
cr.plugins_ = {};
cr.runtime = null;

cr.plugins_.Vinoos_Markets = function(runtime) {
    this.runtime = runtime;
};
(function() {
	function initialize_events(result) {
		alert(result);
	}
})();
Run Code Online (Sandbox Code Playgroud)
<button onclick="initialize_events('Test Result');">Send Result</button>
Run Code Online (Sandbox Code Playgroud)

如何通过单击按钮从html运行'initialize_events'函数?

我无权访问编辑JavaScript文件.

T.J*_*der 13

我没有权限编辑js文件.

然后你不能,完全停下来.对于包含它的匿名IIFE*来说,它是完全私密的.您必须将其公开为全局,以便将其与onxyz-attribute样式的事件处理程序一起使用(这需要修改JavaScript代码).这是不使用它们的众多原因之一.

由于你不能在不修改JavaScript的情况下做到这一点,我将假设你克服了这个限制并建议在/如果你可以修改JavaScript 时该怎么做:

让IIFE挂钩按钮,data-*如果您需要特定于按钮的信息来传递它,请使用属性:

var cr = {};
cr.plugins_ = {};
cr.runtime = null;

cr.plugins_.Vinoos_Markets = function(runtime) {
  this.runtime = runtime;
};
(function() {
  function initialize_events(result) {
    alert(result);
  }
  document.getElementById("send-result").addEventListener("click", function() {
    initialize_events(this.getAttribute("data-result"));
  }, false);
}());
Run Code Online (Sandbox Code Playgroud)
<button id="send-result" data-result="Test Result">Send Result</button>
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 如果您需要支持过时的浏览器addEventListener(例如IE8,这对许多人来说仍然是一个遗憾的要求),请参阅此答案以获取跨浏览器事件挂钩功能.
  • 如果您拥有IIFE中的数据而不是按钮,则可以直接使用它而不是使用data-*属性.
  • 给按钮一个ID和使用getElementById只是一个例子; 在实践中,任何让你识别按钮的东西都是你需要的.您可以通过使用完整的CSS选择器进行查找document.querySelector.

*IIFE =立即调用的函数表达式,例如,(function() { /*...*/})();(有时也被称为"内联调用函数表达式".有时也被错误地称为"自调用函数",但它不是;它由定义它的代码调用,不是由功能本身.)