为什么在窗口调整大小时不会触发非匿名函数?

时间:2012-10-10 18:11:54

标签: jquery javascript-events

我想绑定/取消绑定事件监听器到窗口调整大小我正在使用.on()/。off()函数来完成它。因为.off()需要传递与.on()相同的函数,我创建了一个单独的函数,它在两个地方传递。

这是代码(不工作):

var i = 0;
function onResizeListener(){
    $('#debug').html(i);
    i++;
}
$(document).ready(function() {
    $(window).on('resize',onResizeListener());
});

示例:http://jsfiddle.net/eRupC/2/

当我使用匿名函数包装onResizeListener()时,这个正在工作:http://jsfiddle.net/eRupC/1/

示例中的理想结果:当您调整窗口大小时,数字已更改。

提前致谢。

3 个答案:

答案 0 :(得分:2)

如果您需要将某些内容传递给onResizeListener,请尝试此操作。如果没有,请从onResizeListener中删除括号,如其他答案所示。 Bind Documentation

$(document).ready(function() {
  var x = 2;
  var y = 4;
  $(window).bind('resize', function() {
    onResizeListener(x, y);
  });
});

这也有效:

$(document).ready(function() {
  $(window).on('resize', function() {
    onResizeListener();
  });
});

来自resize事件的unbind函数调用,但仍将参数传递给您可以使用的函数:

$(document).ready(function() {
    //bind
    $(window).bind('resize', { foo: 'bar' },onResizeListener);

    //unbind, wrap in event you wish to use to unbind it
    $(window).unbind('click', onResizeListener);
});

答案 1 :(得分:0)

您需要从事件处理程序代码中删除括号...

var i = 0;
function onResizeListener(){
    $('#debug').html(i);
    i++;
}
$(document).ready(function() {
    $(window).on('resize',onResizeListener);
});

答案 2 :(得分:0)

替换此行

  $(window).on('resize',onResizeListener());

用这个

  $(window).on('resize',onResizeListener);

http://jsfiddle.net/pc5uC/