2012-02-27 51 views
2

我的问题是:我正在开发一个带有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...}); 

我不会诉诸使用匿名函数虽然,因为我已经写了以前的功能。我想要做的事情非常简单:多次调用某个函数而不诉诸匿名函数来“复制”我的代码(毕竟,函数应该如何工作,对吗?)。

+0

[jQuery:使用预定义函数添加更改事件处理程序](http:// stackoverflow。com/questions/4524207/jquery-adding-change-event-handler-with-predefined-function) – 2012-02-27 21:53:45

回答

3

变化$(window).resize(goToAnchor());$(window).resize(goToAnchor);

+0

这是正确的,它现在正在工作。感谢您的帮助。 – user1236489 2012-03-01 21:10:08

2

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

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

但你也可以这样做:

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

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

+0

“传递'goToAnchor'函数的代码”?不完全的。它通过调用* goToAnchor函数传递*结果。括号会导致函数被执行。 – cHao 2012-02-27 21:58:03

+0

@cHao这是非常尴尬的陈述,感谢您的意见。 – Jasper 2012-02-27 21:59:24

+0

@贾斯珀感谢您的回答,现在工作正常。顺便说一句,我昨天晚上读了关于.trigger()的文章,并且开始对它“玩得开心”,因此你的回答特别值得赞赏。 – user1236489 2012-03-01 21:13:17

0

的一个好办法,看看发生了什么,是通过改变函数的声明:

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

在这种情况下,

$(window).resize(goToAnchor); 

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

明显做同样的事情。

+0

也感谢你。干杯 – user1236489 2012-03-01 21:16:58