2012-12-21 12 views
5

mam kod jak poniżej:

$('a.load-more').on("click",function(){ 
    $.get($('a.load-more').attr('href'), function(data) { 
    $(".next-page").remove(); 
    $('.block-grid').append(data); 
    event.preventDefault(); 
}); 

HTML:

<li class="next-page"> 
<a href="http://example.com/ajax_all/" class="load-more">Load More →</a> 
</li> 

Które jak widać, bierze url ajax zawartości z elementu .load-more przekazuje go do metody $ get, która następnie pobiera zawartość i dołącza ją do bieżącej strony.

Dziwne jest jednak to, że działa w przeglądarce Chrome, ale nie w przeglądarce Firefox lub Safari i nie ma błędów js w inspektorach dla tych przeglądarek.

Zamiast ciągnąć zawartość za pomocą ajax, po prostu przechodzi do adresu URL http://example.com/ajax_all/ i wyświetla jej zawartość.

Zastanawia mnie, dlaczego działa w Chrome, a nie Safari czy Firefox.

+0

Kod brakuje '});' –

Odpowiedz

5

Ty skrypt jest nieprawidłowy lub wklejone źle

$('a.load-more').on("click", function() { 
    $.get($('a.load-more').attr('href'), function (data) { 
     $(".next-page").remove(); 
     $('.block-grid').append(data); 
     event.preventDefault(); 

}); 

Po ustaleniu, że to pokazuje, że event.preventDefault(); się dzieje wewnątrz get() który jest asynchroniczny.

$('a.load-more').on("click", function() { 
    $.get($('a.load-more').attr('href'), function (data) { 
     $(".next-page").remove(); 
     $('.block-grid').append(data); 
     event.preventDefault(); 
    }); 
}); 

Umieszczenie numeru preventDefault poza numerem wywołania zwrotnego powinno rozwiązać problem.

$('a.load-more').on("click", function (e) { 
    $.get($('a.load-more').attr('href'), function (data) { 
     $(".next-page").remove(); 
     $('.block-grid').append(data); 

    }); 
    e.preventDefault(); 
}); 
+0

Nie należy korzystać z globalnej 'event' obiektu, należy użyć parametru zdarzenia przekazany do' click' imprezy. –

+1

@RocketHazmat nawet tego nie zauważyła, dzięki i zaktualizowała. –

+0

Genialny! To jest to!! Dziękuję :) – John

3

Twoim problemem jest słowo kluczowe, musi ono występować w parametrach wywołania zwrotnego kliknięcia.

Spróbuj tego:

$('a.load-more').on("click", function(e){ 
    e.preventDefault(); 
    $.get($('a.load-more').attr('href'), function(data) { 
     $(".next-page").remove(); 
     $('.block-grid').append(data); 
    }); 
}); 
+0

Niektóre przeglądarki (IE i Chrome) mają globalny obiekt 'event', inne nie. użyj obiektu zdarzenia dostarczonego przez jQuery.) –

+0

Dzięki, dostaniesz tick jeśli ten facet nie dotarł pierwszy. Naprawdę doceniam odpowiedź! – John

Powiązane problemy