JQuery адреса и живой метод - PullRequest
       23

JQuery адреса и живой метод

1 голос
/ 03 апреля 2010
//deep linking 
$.fn.ajaxAnim = function() {
    $(this).animW();
    $(this).html('<div class="load-prog">loading...</div>');
}

$("document").ready(function(){
    contM = $('#main-content');
    contS = $('#second-content');
    $(contM).hide();
    $(contM).addClass('hidden');
    $(contS).hide();
    $(contS).addClass('hidden');
    function loadURL(URL) {
        //console.log("loadURL: " + URL);
        $.ajax({ url: URL, 
                beforeSend: function(){$(contM).ajaxAnim();},
                type: "POST",
                dataType: 'html',
                data: {post_loader: 1},
                success: function(data){
                    $(contM).html(data);
                    $('.post-content').initializeScroll();
                    }
        });
    }

    // Event handlers
    $.address.init(function(event) {
        //console.log("init: " + $('[rel=address:' + event.value + ']').attr('href'));
    }).change(function(event) {
        evVal = event.value;
        if(evVal == '/'){return false;}
        else{
            $.ajax({ url: $('[rel=address:' + evVal + ']').attr('href'), 
                    beforeSend: function(){$(contM).ajaxAnim();},
                    type: "POST",
                    dataType: 'html',
                    data: {post_loader: 1},
                    success: function(data){
                        $(contM).html(data);
                        $('.post-content').initializeScroll();
            }});
        }
        //console.log("change");
    })

    $('.update-main a, a.update-main').live('click', function(){
        loadURL($(this).attr('href'));
        return false;
    });

  $(".update-second a, a.update-second").live('click', function() {
    var link = $(this);
        $.ajax({ url: link.attr("href"),
                beforeSend: function(){$(contS).ajaxAnim();},
                type: "POST",
                dataType: 'html',
                data: {post_loader: 1},
                success: function(data){
                    $(contS).html(data);
                    $('.post-content').initializeScroll();
        }});
        return false;
  });

});

Я использую адреса jquery для обновления содержимого, сохраняя при этом полезный URL. При нажатии на ссылки в главном меню URL обновляется правильно, но когда ссылки загружаются динамически с помощью Ajax, функция адреса URL прерывается.

Я сделал живыми события «клика», позволяя загружать контент по динамически загружаемым ссылкам, но я не могу заставить слушателя события адреса работать, но это, кажется, единственный способ заставить эту работу работать. Мой синтаксис неправильный, если я изменяю это:

$.address.change(function(event) {

к этому:

$.address.live('change', function(event) {

или метод live не работает с этим плагином?

Ответы [ 3 ]

1 голос
/ 04 апреля 2010

зашел в файл плагина адреса jquery и заменил эту строку:

$.fn.address = function (fn) {
    $(this).click(function() {

с этим:

 $.fn.address = function (fn) {
        $(this).live('click',function() {

чтобы все динамически загружаемые ссылки отвечали на прослушиватель событий плагина адреса

0 голосов
/ 03 апреля 2010

Во-первых, краткий ответ: Нет, это не работает:)

Почему часть : .live() отрабатывает события, им все равно,обычай и т. д. (в большинстве случаев).Он работает, когда вы вызываете .live(), например, так:

$(".myThing").live('click', functionToRun);

.live() создает обработчик событий в корне DOM, ожидая, пока события всплывают.Важная часть: новые или старые элементы всплывают события одинаково , независимо от того, как они были загружены.Когда событие всплывает и достигает корня DOM, обработчики событий .live() проверяют, совпадает ли их селектор с элементом, у которого было событие, и, если да, они выполняются.что-то и запустить код на нем ... как вы можете видеть, это сильно отличается от того, как .live() на самом деле работает внутри.

0 голосов
/ 03 апреля 2010

Метод live работает только с элементами jquery dom. Не с плагинами.

Метод live определяет, был ли элемент dom динамически добавлен в HTML, и привязывает к нему событие. То, что вы пытаетесь сказать, есть: «Если плагин« address »появляется в html, привяжите к нему событие« change »». Плагин "address" не является элементом dom, он не работает.

...