Событие Click продолжает стрелять - PullRequest
0 голосов
/ 29 марта 2010

Я абсолютно не знаю, почему это происходит, но следующий код, кажется, выполняется огромное количество раз во всех браузерах.

$('#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 Ответ

4 голосов
/ 29 марта 2010

В основном, что вы делаете: каждый раз, когда KeyUp срабатывает, вы загружаете результаты и присоединяете дополнительный обработчик .click к $ ('# save_albums'), что плохо. (jQuery может связать несколько функций с событием, поэтому если вы вызываете $ ('что-то'). click (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);
                }
            });

В качестве альтернативы, вы можете попробовать реструктурировать исходный код, чтобы обработчик кликов был подключен только один раз.

...