0

这是我第一次尝试使用 ajax 加载页面。

这在几页上都可以正常工作,但是有些页面带有幻灯片或其他 jquery 函数,脚本停止工作,我看到一些关于我需要再次调用函数的内容,但我不知道我的代码在哪里是正确的地方,比如我需要在加载页面上调用。

有我的 javascript 代码

$(document).ready(function(){ 
preload([
'/img/bg_body_topo.jpg',
'/img/img_topo.png',
'/img/logo_topo.png'
]);  

 $("a[rel*=outside]").attr( "target", "_blank" );
 $('#scrollbar').tinyscrollbar({ sizethumb: 55 });
 $('#menu-topo ul li ul').hide();
 $('#menu-topo ul li').hover(function(e) {
 $(this).find('ul').stop().fadeToggle("fast");
 });

 $("#home-slide-destaques").scrollable({ circular: true }).autoscroll({ autoplay: true     }).navigator(".controles");         
  // DISCOGRAFIA
  $("ul#int-abas-discografia").tabs("div#int-conteudo-discografia > div", { effect: 'fade' });
  // INTEGRANTES
  $("ul#int-abas-integrantes").tabs("div#int-conteudo-integrantes > div", { effect: 'fade' });


 var content = $('#content');  
 //pre carregando o gif  
    loading = new Image(); loading.src = '/img/103.gif';  
    $('#menu-topo a, a#menu-ajax').live('click', function( e ){  
        e.preventDefault();  

                var tHeight = $('#wrapper').height();
                var tWidth = $('#wrapper').width();
                var posicao = $('#wrapper').position();

                $('#carregando').remove();
                $('#imgcarregando').remove();

                $('#wrapper').prepend('<div id="carregando"></div>   <div id="imgcarregando"> <img src="/img/103.gif" style="margin:280px 0 0 0;" alt="Carregando"/></div>');

                $('#carregando').css({
                    'position': 'absolute',
                    'width': tWidth,
                    'height': tHeight,
                    'top': posicao.top,
                    'left': posicao.left,
                    'background': '#000',
                    'opacity': '.60',
                    'z-index': '9900',
                    'text-align': 'center'
                });


                $('#imgcarregando').css({
                    'position': 'absolute',
                    'width': tWidth,
                    'height': tHeight,
                    'top': posicao.top,
                    'left': posicao.left,
                    'background': '#000 url(/img/logo_topo.png) center 200px no-repeat',
                    'padding': '30px 0 0 0 ',
                    'opacity': '.88',
                    'z-index': '9999',
                    'text-align': 'center'
                });


                    content.html( '' );  


        var href = $( this ).attr('href');  
        $.ajax({  
            url: href,  
            success: function( response ){  
                //forçando o parser  
             var data = $( '<div>'+response+'</div>' ).find('#content').html();  

                //apenas atrasando a troca, para mostrarmos o loading  
                window.setTimeout( function(){  
                    content.fadeOut('slow', function(){  

                         $('#carregando').fadeOut('slow');
                         $('#imgcarregando').fadeOut('slow');
                         $('#content').height('auto');
                            // DESTAQUES

                         content.html( data ).fadeIn(); 

                    });  
                }, 1000 );  
            }  
        });  

    });                        

});  

     function preload(arrayOfImages) {
     $(arrayOfImages).each(function(){
    $('<img/>')[0].src = this;
    // Alternatively you could use:
    // (new Image()).src = this;
     });
      }
4

3 回答 3

0

我认为您正在尝试在新的 ajax 页面中加载旧的常用 html 页面。当您加载新内容时,您不会像以前那样加载它的脚本,您也需要加载它们。您可以尝试自己执行此操作,通过 ajax 在新标签中插入适当的脚本,或者只是在开始时为所有内容加载所有适当的脚本,或者我建议您在需要时使用 require.js 之类的库加载它们,已经针对它进行了优化。

于 2013-02-10T21:43:19.950 回答
0

几天前有一个类似的问题并设法用ajaxComplete解决它,每次ajax加载完成时都会执行

做了类似的事情:

var rebindButtons = function(){
   $(elements).unbind('click').click(function(){
       // rebinding of button functionality
   });
}
$(document).ready(function(){
  // we bind the buttons for the first time
  rebindButtons();
  // and when there's an ajax call completed we rebind the buttons
  $(document).ajaxComplete(function() {
    rebindButtons();
  });
})
于 2013-02-10T21:40:00.813 回答
0

我不知道这是否是正确的方法,但我做了一些改变,现在 99% 的工作..

我有钱

$(document).ready(function(){  

// to

$(function(){

我也用javascript函数做了这个

function boxWallpapers(){


$("#home-slide-destaques").scrollable({ circular: true }).autoscroll({ autoplay: true }).navigator(".controles");          

     // DISCOGRAFIA
$("ul#int-abas-discografia").tabs("div#int-conteudo-discografia > div", { effect: 'fade' });

   // INTEGRANTES
$("ul#int-abas-integrantes").tabs("div#int-conteudo-integrantes > div", { effect: 'fade' });

$('#menu-topo ul li ul').hide();
$('#menu-topo ul li').hover(function(e) {
    $(this).find('ul').stop().fadeToggle("fast");
});

  }

然后在ajax上

      $.ajax({  
            url: href,  
            success: function( response ){  
                //forçando o parser  

             var data = $('<div>'+response+'</div>').find('#content').html();  

                //apenas atrasando a troca, para mostrarmos o loading  
                window.setTimeout( function(){  
                    content.fadeOut('slow', function(){  

                         $('#carregando').fadeOut('slow');
                         $('#imgcarregando').fadeOut('slow');
                         $('#content').height('auto');


                         content.html( data ).fadeIn(); 
                         boxWallpapers();  // HERE HERE



                    });  
                }, 1000 );  
于 2013-02-11T03:54:15.730 回答