如何多次调用函数?
我的问题是:我正在开发一个包含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 ... });
显然做同样的事情。