0

我已经构建了一个具有推送状态的应用程序。一切正常。但是在某些情况下,我的 jquery 函数会触发多次。那是因为当我调用推送状态时,我为我调用的每个页面绑定了特定的 js 文件。这意味着当我在我的页面中冲浪时,相同的 js 函数会多次绑定到 html。

提示:我在我的 jquery 函数中使用了 documen.on,因为我需要我的函数通过 Ajax 绑定到动态打印的 HTML。

打印前尝试在push状态下使用off,没有成功!

这是我的代码:

var requests = [];

        function replacePage(url) {

            var loading = '<div class="push-load"></div>'
            $('.content').fadeOut(200);
            $('.container').append(loading);

            $.each( requests, function( i, v ){
                v.abort();
            });

            requests.push( $.ajax({                     
                    type: "GET",
                    url: url,
                    dataType: "html",
                    success: function(data){            

                        var dom = $(data);
                        //var title = dom.filter('title').text();
                        var html = dom.find('.content').html();
                        //alert(html);
                        //alert("OK");
                        //$('title').text(title);
                        $('a').off();
                        $('.push-load').remove();                       
                        $('.content').html(html).fadeIn(200);
                        //console.log(data);

                        $('.page-loader').hide();
                        $('.load-a').fadeIn(300);                       
                    }
                })
            );
        }

        $(window).bind('popstate', function(){
            replacePage(location.pathname);
        }); 

提前致谢!

4

2 回答 2

0

用空白代码简单绑定新函数

$( "#id" ).bind( "click", function() {
//blank
});

或者

用过的

 $('#id').unbind();
于 2013-09-03T13:37:11.260 回答
0

尝试这个,

 var requests = [];

   function replacePage(url) {
       var obj = $(this);
       obj.unbind("click", replacePage); //unbind to prevent ajax multiple request
       var loading = '<div class="push-load"></div>';
        $('.content').fadeOut(200);
        $('.container').append(loading);
       $.each(requests, function (i, v) {
           v.abort();
       });
       requests.push(
       $.ajax({
           type: "GET",
           url: url,
           dataType: "html",
           success: function (data) {
               var dom = $(data);
                    //var title = dom.filter('title').text();
                    var html = dom.find('.content').html();
                    //alert(html);
                    //alert("OK");
                    //$('title').text(title);
                obj.bind("click", replacePage); // binding after successfulurl ajax request
                 $('.push-load').remove();                       
                    $('.content').html(html).fadeIn(200);
                    //console.log(data);

                    $('.page-loader').hide();
                    $('.load-a').fadeIn(300);    
            }
       }));
   }

希望这有帮助,谢谢

于 2013-09-03T14:07:22.760 回答