2013-04-03 172 views
1

我創建了一個自定義腳本,允許使用ajax(ajax html內容加載器)加載html內容。 此腳本在元素單擊時執行。Jquery調用回調函數

此腳本在單擊時與硬編碼元素一起工作良好。

但是,在我的html中,我添加了很多元素感謝點擊。

這個新添加的元素無法通過我的ajax html內容加載器加載內容。

我需要回調我的ajax腳本,以使其在新的附加元素上工作。

我不知道如何編寫我的腳本才能進行回調。

這裏我的腳本:

$(function ajax() { 
    function ajaxify(file) { 
     $.get(file, function (data) { 

      var folderContent = $("#bottom-container"); 
      $("#prev-ajax").fadeOut(0); 
      $("#next-ajax").fadeOut(0); 
      folderContent.slideToggle(1000,"easeOutCirc", function() {; 
      $("#loading-bloc").show(); 
      $("#loading-text").fadeIn(500); 
      $("#ajaxify_container").hide(function() { 

      $("#loading-bloc").everyTime(10, function(){       
      $("#loading-bloc").animate({left:"100%"}, 1000).animate({left:"0%"}, 1000); 
      }); 
      $("#ajaxify_container").show(function() {   
      folderContent.slideToggle(1000,"easeOutCirc"); 
      $("#loading-bloc").hide(); 
      $("#loading-text").fadeOut(500); 
      $("#prev-ajax").fadeIn(300); 
      $("#next-ajax").fadeIn(300); 
      }); 
     }); 
    }); 
    }); 
} 


$('.link:not("#prev-ajax,#next-ajax")').on("click",function (e) { 
    e.preventDefault(); 

    var functionAlink = $(this); 
    var functionBlink = $(this); 

    var $parent= functionAlink.parents('.element'); 

    var prev = $parent.prev().find('.link').attr('href'); 
    var next = $parent.next().find('.link').attr('href'); 
    if (typeof prev != 'undefined') { 
     $("#prev-ajax").attr('href', prev); 
     $("#prev-ajax").animate({opacity: 1}, 300); 
    }else { 
     $("#prev-ajax").removeAttr("href"); 
     $("#prev-ajax").animate({opacity: 0.4}, 300); 
    } 
    if (typeof next != 'undefined') { 
      $("#next-ajax").attr('href', next); 
     $("#next-ajax").animate({opacity: 1}, 300); 
    }else { 
     $("#next-ajax").removeAttr("href"); 
     $("#next-ajax").animate({opacity: 0.4}, 300); 
    } 


    var link = functionBlink; 
    if (!link.hasClass('current')) { 
     $('.link').removeClass('current'); 
     link.addClass('current'); 
     ajaxify(link.attr('href')); 
     window.location.hash = link.attr("href"); 
    } 

    return false; 
}); 

$("#prev-ajax,#next-ajax").on("click",function (e) { 
    e.preventDefault(); 
    var functionAlink = $(this); 
    var functionBlink = $(this); 
    //$("#prev-ajax").fadeOut(0); 
    //$("#next-ajax").fadeOut(0); 


    ajaxify(functionAlink.attr('href')); 
    window.location.hash = functionAlink.attr("href"); 
    $('.link').removeClass('current'); 


    var href = functionBlink.attr('href'); 
    var link = $(".link[href*= '" + href + "']:not(#prev-ajax, #next-ajax)"); 
    link.addClass('current'); 
    var $parent = link.parents('.element'); 
    var prev = $parent.prev().find('.link').attr('href'); 
    var next = $parent.next().find('.link').attr('href'); 
    if (typeof prev != 'undefined') { 
     $("#prev-ajax").attr('href', prev); 
     $("#prev-ajax").animate({opacity: 1}, 300); 
    }else { 
     $("#prev-ajax").removeAttr("href"); 
     $("#prev-ajax").animate({opacity: 0.4}, 300); 
    } 
    if (typeof next != 'undefined') { 
     $("#next-ajax").attr('href', next); 
     $("#next-ajax").animate({opacity: 1}, 300); 
    }else { 
     $("#next-ajax").removeAttr("href"); 
     $("#next-ajax").animate({opacity: 0.4}, 300); 
    } 
}); 

}); 



$(function(){ 
    $(window).hashchange(function(){ 
    var hash = window.location.hash; 
    var hash = location.hash.replace("#",""); 

if(window.location.hash) { 
    $.get(hash, function (data) { 
     $('#LoadingImage').show(); 
      $("#ajaxify_container").fadeOut(1500, function() { 
       $(this).html(data).fadeIn(1500, function() { 
        $('#LoadingImage').hide(); 
       }); 
      }); 
     }); 
} else { 
    // Fragment doesn't exist 
}  
    }) 
    $(window).hashchange(); 
}); 

對不起,我的英語,我是法國人

盧瓦克

+0

很難知道你要問什麼,但你已經使用'$回調.get'來追加元素,所以我猜測問題是事件處理程序不能與動態內容一起工作,並且你必須使用'on()'的委託版本。您可以閱讀jQuery文檔,在那裏很好地解釋它,或者搜索SO上的委派事件處理程序。 – adeneo

+0

謝謝你的回答。我已經在我的代碼中添加了click函數中的'.on'。這是點擊功能,不適用於附加元素... – lolo

回答

2

(快速閱讀你的問題,必須儘快離開很抱歉,如果題外話。):

也許你應該嘗試:

$(document).on("click",'.link:not("#prev-ajax,#next-ajax")',function (e) { 

代替

$('.link:not("#prev-ajax,#next-ajax")').on("click",function (e) { 

你的英語很不錯(從一個法國點;-)

+0

你是對的!非常感謝!它解決了我所有的問題。我需要驗證是否所有的點擊功能都能正常工作,但似乎沒問題! – lolo