如何多次调用函数?

时间:2012-02-27 21:48:29

标签: javascript jquery function anonymous-function

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

我不会深入研究这些东西的细节,因为它会很长并且可能很无聊,无论如何我需要在$(document).ready和{上{em> 上调用这个函数{1}},即每次调整窗口大小时。

所以我声明了一个函数,并将其命名为$(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()); }); 上运行。我检查了jQuery文档并注意到关于将函数链接到事件的每个示例都是这样写的:

resize

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

您想要将$(window).resize(goToAnchor());替换为$(window).resize(goToAnchor);

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

但你也可以这样做:

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

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

答案 2 :(得分:0)

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

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

在哪种情况下

$(window).resize(goToAnchor);

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

显然正在做同样的事情。