2012-09-04 61 views
2

有两个绑定到$(window).scroll()的js脚本。在一个脚本(example1.js)中,当满足某些条件时,我需要解除绑定事件(或找到可接受的替代方案),但这会导致事件完全解除绑定,并删除所有功能。解除绑定多次的事件

我想要做的是,一旦符合标准,停止滚动事件从example1.js的发射而不是example2.js。

example1.js

function exampleFunction(self) { 
    $(window).scroll(function() { 
     if ($(window).scrollTop() >= $(document).height() - $(window).height() - 364) { 
      self.start(); 
     } 
    }); 

    $.ajax({ 
     url: self.settings.dataUrl, 
     dataType: "json", 
     async: false, 
     cache: false, 
     success: function (json) { 
      if (json.data.length) { 
       self.json = json; 
       self.addImages(); 
      } else { 
       $(window).unbind('scroll'); 
      } 
     } 
    }); 
} 

example2.js

$(window).scroll(function() { 
    someFunction(); 
}); 

回答

2

看看Namespaced Events。这将允许您命名空间事件,然后仅解除绑定该名称空间,使其他绑定保持不变。

例如:

// Create Bindings // 
$(window).bind('scroll.example1', function(e){ 
    ... 
}); 

$(window).bind('scroll.example2', function(e){ 
    ... 
}); 

// Unbind ONLY .example1 Namespace // 
$(window).unbind('scroll.example1'); 

我希望这有助于!

+0

非常好,正是我所需要的。谢谢! – bflemi3

+0

@ bflemi3太好了!很高兴我能帮上忙。 – dSquared

1

绑定事件时使用namespaced事件。

例子:

//bind click.a 
$('.class').on('click.a', function(){ alert ('inside a space'); }); 
//bind click.b 
$('.class').on('click.b', function(){ alert ('inside b space'); }); 

//unbind click.b 
$('.class').off('click.b'); 

//trigger click.a 
$('.class').trigger('click.a'); 

在你的情况,

example1.js

function exampleFunction(self) { 
    $(window).on('scroll.e1', function() { //bind scroll.e1 
     if ($(window).scrollTop() >= $(document).height() - $(window).height() - 364) { 
      self.start(); 
     } 
    }); 

    $.ajax({ 
     url: self.settings.dataUrl, 
     dataType: "json", 
     async: false, 
     cache: false, 
     success: function (json) { 
      if (json.data.length) { 
       self.json = json; 
       self.addImages(); 
      } else { 
       $(window).unbind('scroll.e1'); //unbind scroll.e1 
      } 
     } 
    }); 
} 

example2.js

$(window).on('scroll.e2', function() { //bind scroll.e2 
    someFunction(); 
});