Click事件一直在触发

时间:2010-03-29 01:40:03

标签: jquery events click

我完全不知道为什么会这样,但以下代码似乎在所有浏览器中执行了很多次。

$('#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');
        }
    });
}); 

1 个答案:

答案 0 :(得分:4)

基本上你在做什么:每次KeyUp触发时,你加载结果并附加一个额外的.click处理程序到$('#save_albums'),这很糟糕。 (jQuery可以将多个函数绑定到一个事件,所以如果你调用$('something')。单击(function(){alert('x');}); 3次,你得到3个警报)

根据您的具体用法,您可以拨打$('#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);
                }
            });

或者,您可以尝试重构源代码,使点击处理程序只附加一次。