2012-01-23 18 views
7

这适用于运行在两个准备和调整相同的代码在同一时间调整?绑定到准备和使用jQuery。对()

+0

'on'是'bind','live'和'delegate'的替代品,但不是速记方法。如果你出于好奇问好,但是你不需要改变你的代码来使用'.on'。 –

+0

@FelixKling我想弄清楚最快的方法。 – ryanve

+0

@FelixKling和yea,也只是好奇。 – ryanve

回答

13

on可用于连接调整大小和就绪事件,就像任何其他事件一样。

因此,对于您的情况,您可以创建一个函数,其中包含要为resizeready发生的代码,然后将它传递给两个调用on

如果你想保持你的封闭范围干净,你可以做到这一切在立即执行功能:

(function() { 
    function stuffForResizeAndReady(){ 
     // Stuff in here happens on ready and resize. 
    } 

    $(window).on("resize", stuffForResizeAndReady); 
    $(document).on("ready", stuffForResizeAndReady); 
})(); 

2012-07-25:有2种不同使用时要注意的.on()附加准备处理程序:

  • 准备处理程序通过$(fn)$(document).ready(fn)添加是“复古烧”,而那些通过.on()添加都没有。使用这些,如果在DOM已经加载之后添加一个处理程序,那么fn将立即被触发。如果你通过.on('ready', fn)添加一个处理程序后 DOM被加载,它会而不是被jQuery解雇,但你可以手动.trigger('ready')它。

  • 当您使用$(fn)$(document).ready(fn)添加一个现成的处理程序,按fn接收jQuery作为第1阿根廷,允许familar jQuery(function($){ })使用。如果您使用$(document).on('ready', fn),则fn收到的第1个参数是event object。在这两种情况下,fn中的thisdocument。如果您为了触发目的而执行诸如$('#foo').on('ready', fn)之类的异常,则this将是#foo元素。

+1

不错/这使得它也很可读。 – ryanve

+0

@ryanve - 是的,你可以用JavaScript中的闭包做一些伟大的事情 –

+0

我选择这个答案B/C它是特定的问题和它的可读性。来自@Jasper的答案也很扎实,根据具体情况可能会更快。 – ryanve

4

.ready().resize(),和其他人一样.mouseover()都只有捷径使用.bind()函数(或.on() jQuery中1.7+)。 .resize(function() {})映射到.bind('resize', function() {})。这里是你的代码看起来如何使用.on()尽可能:

$(document).on('ready', function() { 

    $(window).on('resize', function() { 

     // Stuff in here happens on ready and resize. 

    }).trigger('resize'); // Trigger resize handlers.  

});//ready 

这里是一个演示:http://jsfiddle.net/qMBtP/

+0

使用'trigger('resize')make会比'resize()'快。这可能是最快的方法。 http://jsperf.com/bind-to-ready-and-resize-1 – ryanve

0

绑定它既负载和调整事件,如下:

$(window).on('load resize', function() { 
// your code 
}); 

简单多了 - 希望这可以帮助。