使用jQuery脚本,页面加载逐渐变慢

时间:2014-03-26 23:23:29

标签: javascript jquery performance loading delay

我正在使用此jQuery脚本来显示搜索结果。一切正常,但是当搜索结果有多个页面并且我通过分页浏览页面时,每个页面加载都会逐渐变慢。通常首先cca 10页加载我很快得到,但接下来是避免加载延迟。整个网站冻结了一会儿(也是装载机图像),但浏览器还没有。应该是什么问题?

function editResults(def) {
    $('.searchResults').html('<p class=\'loader\'><img src=\'images/loader.gif\' /></p>');
    var url = def;
    var url = url + "&categories=";
    // Parse Categories
    $('input[name=chCat[]]').each(function() {    
        if (this.checked == true) {
            url = url + this.value + ",";
        }
    });
    url = url + "&sizes=";
    // Parse Sizes
    $('input[name=chSize[]]').each(function() {    
        if (this.checked == true) {
            url = url + this.value + ",";
        }
    }); 
    url = url + "&prices=";
    // Parse Prices
    $('input[name=chPrice[]]').each(function() {    
        if (this.checked == true) {
            url = url + this.value + ",";
        }
    });
    $('.searchResults').load('results.php'+url);
    $('.pageLinks').live("click", function() {
        var page = this.title; 
        editResults("?page="+page);
    });
}
$(document).ready(function(){
    editResults("?page=1");
    // Check All Categories
    $('input[name=chCat[0]]').click(function() {
        check_status = $('input[name=chCat[0]]').attr("checked");
        $('input[name=chCat[]]').each(function() {    
            this.checked = check_status;    
        });
    });
    // Check All Sizes
    $('input[name=chSize[0]]').click(function() {
        check_status = $('input[name=chSize[0]]').attr("checked");
        $('input[name=chSize[]]').each(function() {    
            this.checked = check_status;    
        });
    });
    // Edit Results
    $('.checkbox').change(function() {
        editResults("?page=1");
    });
    // Change Type
   $(".sort").change(function() {               
        editResults("?page=1&sort="+$(this).val());
   });          
});

1 个答案:

答案 0 :(得分:4)

$('.pageLinks').live("click", function() {
    var page = this.title; 
    editResults("?page="+page);
});

只是一个疯狂的猜测,但是...这段代码不会为click事件添加一个新的事件处理程序,而是用一个新的事件处理旧的事件处理程序吗?导致点击调用所有曾经注册的处理程序。

你应该只进行一次事件绑定

var global_var = '1';

function editResults(def) {
    // all your code
    global_var = 2; // what ever page goes next
};

$(document).ready(function() {
    // all your code ...
    $('.pageLinks').live("click", function() {
        var page = global_var;
        editResults("?page="+page);
    });
});