Click event keep firing

Click event keep firing

问题描述:

我完全不知道为什么会发生这种情况,但下面的代码似乎在所有浏览器中执行了大量的时间。Click event keep firing

$('#save_albums').click(function(){ 
    for(var i = 1; i <= 5; i++){ 
     html = $('#your_albums ol li').eq(i).html(); 
     alert(html); 
    } 
}); 

显得颇为无辜的,我...

以下是完整

$(function(){ 
    $('#query').keyup(function(){ 
     var text = encodeURI($(this).val()); 
     if(text.length > 3){       
      $('#results').load('search.php?album='+text, function(){ 

       $('.album').hover(function(){ 
        $(this).css('outline', '1px solid black') 
       },function(){ 
        $(this).css('outline', 'none') 
       }); 

       $('.album').click(function(){ 
        $('#fores').remove(); 
        $('#yours').show();         

        if($('#your_albums ol li').length <= 4){ 
         albumInfo = '<li><div class="album">' + $(this).html() + '</div></li>'; 

         if($('#your_albums ol li').length >= 1){ 
          $('#your_albums ol li').last().after(albumInfo); 
         } 
         else{ 
          $('#your_albums ol').html(albumInfo); 
         } 
        } 
        else{ 
         alert('No more than 5 please'); 
        } 
       }); 

       $('#clear_albums').click(function(e){ 
        e.preventDefault; 
        $('#your_albums ol li').remove(); 
       }); 

       $('#save_albums').click(function(){ 
        for(var i = 1; i <= 5; i++){ 
         html = $('#your_albums ol li').eq(i).html(); 
         alert(html); 
        } 
       }); 

      }); 
     } 
     else{ 
      $('#results').text('Query must be more than 3 characters'); 
     } 
    }); 
}); 

基本上代码你在做什么:KEYUP火灾,加载结果并附加每次额外的.click处理程序到$('#save_albums'),这是不好的。 (jQuery可以将多个函数绑定到一个事件,所以如果你调用$('something')。click(function(){alert('x');}); 3次,你会得到3个警报)

depends根据您的确切用法,您可以调用$('#save_albums')。unbind('click');

  // Unbind existing 
      $('#save_albums').unbind('click'); 

      $('#save_albums').click(function(){ 
       for(var i = 1; i <= 5; i++){ 
        html = $('#your_albums ol li').eq(i).html(); 
        alert(html); 
       } 
      }); 

或者,你可以尝试重组的源代码有单击处理只有一次附:你添加,然后删除所有点击处理。