如何多次调用函数?

我的问题是:我正在开发一个包含2个样式表的移动友好型网站,一个用于“面向PC”的可视化,另一个用于移动可视化。 与2 CSS一起,当从一种可视化模式切换到另一种时,我需要一个函数来修改菜单上的一些href属性。

我不会深入研究这些东西的细节因为它会很长并且可能很无聊,无论如何我需要在$(document).ready$(window).resize上调用这个函数,这就是每一个调整窗口大小的时间。

所以我声明了一个函数,并将其命名为goToAnchor ,以便能够多次调用它:

 $(document).ready(function() { function goToAnchor() { ... modify some href attr ... } goToAnchor(); }); 

这很好,但正如我所说,我还需要在每次调整窗口大小时执行该函数,所以我认为代码可能如下所示:

 $(document).ready(function() { function goToAnchor() { ... modify some href attr ... } goToAnchor(); $(window).resize(goToAnchor()); }); 

问题很简单,该函数不会在resize运行。 我查看了jQuery文档并注意到每个关于将函数链接到事件的示例都是这样写的:

 $(window).resize(function() { ...do stuff...} ); 

我不会使用匿名函数,因为我之前已经编写过该函数。 我想做的事情非常简单:多次调用一个函数而不需要使用匿名函数来“复制”我的代码(毕竟,这就是函数应该如何工作,对吧?)。

更改$(window).resize(goToAnchor()); to $(window).resize(goToAnchor);

你想要替换: $(window).resize(goToAnchor()); with $(window).resize(goToAnchor);

您的代码正在传递goToAnchor函数的响应,您要做的是传递对函数的引用,我们通过省略括号来完成。

但你也可以这样做:

 $(function() { $(window).bind('resize', function () { /*resize code*/ }).trigger('resize'); }); 

resize事件触发window对象以及document.ready.trigger('resize')使得resize事件触发document.ready )时,这会有效地运行代码。

查看正在发生的事情的好方法是将函数声明更改为:

 var goToAnchor = function() { ... modify some href attr ... } 

在这种情况下

 $(window).resize(goToAnchor); 

 $(window).resize(function() { ... modify some href attr ... }); 

显然做同样的事情。