2014-02-06 40 views
0

如何解除/清除Ajax加载后注册的事件?如何解除ajax加载后注册的jquery事件?

我有以下工作流程的Web应用程序:用户点击一个按钮,这将通过推出的fancybox弹出形式:

$('.launchPopUp').click(function(){ 
    var url = 'something'; 

    $.fancybox({ 
    href : url, 
    type : 'ajax' 
    }); 
}); 

当URL的内容是搜索表单。这里是一个简化版本:

This is a pop-up window. 
<a id="searchButton">Search</a> 

<script type="text/javascript"> 

    $(document).ready(function(){ 
     $(document).on('click', '#searchButton', function() { 
      //Do something here... 
     }); 
    }); 
</script> 

在弹出框中,用户搜索内容,从而得到一个记录表。选择记录后,弹出框将被关闭,所选内容将被添加回页面。

一切按预期工作。但是,当用户关闭fancybox并重新打开它时,我发现jquery事件被多次触发。我想知道是否有任何方法来清除这些动态的jQuery事件。

请注意,由于事件基于用户输入(在打开弹出窗口之前),因此无法在“基本”页面中定义jquery事件。

谢谢!


解决方案:

在我的Ajax代码,我取代了 “文件”,以 “格”:

<script type="text/javascript"> 

    $('#somediv').ready(function(){ 
     $('#somediv').on('click', '#searchButton', function() { 
      //Do something here... 
     }); 
    }); 
</script> 
+0

http://api.jquery.com/off/是你在找什么 – Will

+1

注意,你不需要等待文档准备好绑定到文档本身。 –

+0

谢谢。既然我有很多事件,有没有一种简单的方法来解除所有事件?我试过.empty()没有运气。 –

回答

4

您可以使用.off(),它消除了事件处理程序。

$(document).off('click', '#searchButton'); 

解除绑定的所有事件

$(selector).off(); 

从文档

调用.off()不带参数的除去附着于元件的所有处理程序。

+0

谢谢。既然我有很多事件,有没有一种简单的方法来解除所有事件?在启动fancybox之前,我尝试了$('。fancybox-overlay-fixed')。empty(),但它不能解决问题。 –

+0

@DerekZ。,'$(selector).off();' – Satpal