2012-12-21 14 views
5

Ho codice come di seguito:

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

il codice HTML:

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

che come potete vedere, prende l'URL del contenuto ajax dall'elemento .load-more, lo passa al metodo $ get che quindi estrae il contenuto e lo aggiunge alla pagina corrente.

La cosa strana è però, funziona su Chrome ma non su Firefox o Safari e non ci sono errori js negli ispettori per quei browser.

Invece di estrarre il contenuto utilizzando ajax, va semplicemente all'URL http://example.com/ajax_all/ e visualizza il contenuto di quello.

Sono perplesso sul motivo per cui funzionerebbe in Chrome e non in Safari o Firefox.

+0

Il codice manca un '});' –

risposta

5

script non è valido, o incollato sbagliato

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

}); 

Dopo aver fissato che dimostra che il vostro event.preventDefault(); sta accadendo all'interno del get() che è asincrona.

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

Posizionamento del preventDefault al di fuori della schiena chiamata dovrebbe risolvere il problema.

$('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

Si consiglia di non utilizzare il globale 'event' oggetto, è necessario utilizzare il parametro evento passato all'evento' click'. –

+1

@RocketHazmat non se n'è nemmeno accorto, grazie e aggiornato. –

+0

Brillante! Questo è tutto!! Grazie :) – John

3

Il tuo problema è la parola evento, deve essere nei parametri di richiamo clic.

Prova che:

$('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

Alcuni browser (IE e Chrome) hanno un oggetto 'event' globale, altri no. usa l'oggetto evento fornito da jQuery –

+0

Grazie, avresti ottenuto il segno di spunta se il tizio di cui sopra non fosse arrivato prima. Apprezzo davvero la risposta! – John

Problemi correlati