我的问题是:我正在开发一个带有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
我不会使用匿名函数,因为我之前已经编写过该函数。我想做的事情非常简单:多次调用一个函数而不需要使用匿名函数来“复制”我的代码(毕竟,这就是函数应该如何工作,对吧?)。
答案 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 ... });
显然正在做同样的事情。