我完全不知道为什么会这样,但以下代码似乎在所有浏览器中执行了很多次。
$('#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');
}
});
});
答案 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);
}
});
或者,您可以尝试重构源代码,使点击处理程序只附加一次。