将函数传递给 jquery 窗口加载不起作用

Posted

技术标签:

【中文标题】将函数传递给 jquery 窗口加载不起作用【英文标题】:Passing a function to jquery window load doesn't work 【发布时间】:2017-02-11 12:26:22 【问题描述】:
function App()
...

App.prototype.Initialize = function()
    this.initMaps();
    this.rtspPlayer = new RTSPPlayer(); 
    this.rtspPlayer.initVXGVideoFeeds();


var app = new App();

$(window).load(  app.Initialize );

这给出了这个错误:

jquery-3.1.1.min.js:4 Uncaught TypeError: a.indexOf is not a function

它不应该工作吗?在匿名函数中调用函数作为 .load() 的参数也不起作用。 Initialize() 函数永远不会被调用。

谢谢

【问题讨论】:

您能提供更多代码吗?问题不在您提供的代码中。这可能不是函数的错,而是它内部的原因。 您的代码中没有可见的a var。 a 是什么? a 是 jquery 中的一个变量。当 Initialzie 函数从未被调用时,其他代码不可能是问题。 【参考方案1】:

load()load 事件的简写已从 jq 3.x 中删除,您需要使用:

$(window).on("load",  app.Initialize );

否则,jQuery 会采用这种方法 load() 这会导致您在 jq 3.1.1 上遇到的错误

【讨论】:

就是这样。谢谢。当 *** 允许我时,我会标记为正确答案。【参考方案2】:

如果您在 jQuery API 中搜索 .load(),您会发现两种完全不同的方法:

.load() - 从服务器加载数据并将返回的 html 放入匹配的元素中。

.load() - 将事件处理程序绑定到“加载”javascript 事件。

你想要第二个,它不再存在于 jQuery 3 中:

不推荐使用的版本:1.8,已删除:3.0

对于典型的用例,您无需等待启动脚本直到所有资产都加载完毕(不知道是不是您的情况),您可以执行以下简单操作:

$(app.Initialize);

这是$( document ).ready() 的快捷方式。来自documentation:

绑定一个在 DOM 完成加载时执行的函数。

【讨论】:

以上是关于将函数传递给 jquery 窗口加载不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何将附加参数传递给 jQuery DataTable ajax 调用?

Struts2:将参数传递给动作类不起作用

Django:将字符串参数传递给基于类的视图不起作用

将参数传递给 AJAX 以绑定 DataTable 不起作用

将json数据传递给onclick jquery函数

将 File 对象传递给函数的问题