如何禁用jQuery(document).ready(function()

时间:2017-04-17 12:26:09

标签: jquery ajax

我想在jQuery(document).ajaxComplete之后禁用jQuery(document).ready(function()).. 这是我的代码。

function doStuff(){
  jQuery('.type-title').click(function(e){
       e.preventDefault();
      if(!jQuery(this).parent('.type-top').hasClass('collapsed')){
        jQuery(this).parent('.type-top').addClass('collapsed');  
       }      
    };

jQuery(document).ready(doStuff);
jQuery(document).ajaxComplete(doStuff);

一切正常,但是在新的div被ajax打开后,Click函数只适用于新的div,旧的divs点击不起作用,这意味着我应该禁用jQuery(document).ready函数。我已经做了许多事情,但没有人在工作。

如何禁用jQuery(document).ready功能? 我试试这个,但它也不起作用。

var flag = ' ';
jQuery(document).ready(function() {
 flag = true;
   if(flag){ 
    doStuff();
   } 
}); 
jQuery.ajax({ 
  success: function(){
   flag = false;   
   doStuff(); 
   } 
 });

由于

1 个答案:

答案 0 :(得分:0)

每次你真正需要做的事情就是使用delegated event handler

而不是将事件处理程序附加到div

您没有显示HTML,因此我将使用一个示例,给定,

<div class="my-container">
  <div class="type-top">
     <div class="type-title">...</div>
  </div>
  <div class="type-top">
     <div class="type-title">...</div>
     <div class="type-title">...</div>
  </div>
</div>

您可以通过指定委派的侦听器

来侦听所有子节点上的事件
function doStuff(){
 jQuery(".my-container").on("click", ".type-title", function() {
   e.preventDefault();
   if(!jQuery(this).parent('.type-top').hasClass('collapsed')){
     jQuery(this).parent('.type-top').addClass('collapsed');  
   }  
 });
}

jQuery(document).ready(doStuff);

这个监听器会在添加新的.type-title div时自动选择事件,因此您只需在文档加载时调用一次。