2013-01-18 13 views
6

Non sono sicuro se questo è ancora possibile, ma ho un modulo AJAX come questo violino:Facendo clic su Indietro dopo Fancybox AJAX formulario di presentazione

http://jsfiddle.net/nicorellius/GfeEf/

Sul mio sito, si sta lavorando bene. Faccio una semplice convalida nel modulo con JavaScript, ma se l'utente passa attraverso il JavaScript, l'utente viene presentato con una pagina web Campaign Monitor: o dicendo yay o no alla loro convalida.

Quando l'utente si iscrive correttamente, se l'utente fa clic indietro o utilizza il collegamento back CM, la fancyBox rimane con i dati popolati. Sulla base di come ho scritto lo script, dovrebbe chiudersi dopo l'invio.

Questo è il comportamento di Firefox in Linux e Windows. Chrome cancella effettivamente la pagina e rimuove il modulo fancyBox. La sezione AJAX è qui:

$.ajax({ 
    type  : "POST", 
    cache  : false, 
    url  : "http://<comapny_name>.createsend.com/a/b/c/abcdef/", 
    data  : $(this).serializeArray(), 
    // I've tried both of these commented out pieces to no avail. 
    //beforeSend : function() { 
         //$.fancybox.close(true); 
        //}, 
    //success : function(data) { 
         //$.fancybox.close(true); 
        //} 
}); 

Così, nonostante l'aggiunta di:

success : function() { 
       $.fancybox.close(true); 
      } 

allo script AJAX, io non riesco a farlo per chiudere dopo la presentazione.

EDIT

Vorrei sottolineare, inoltre, che questo fenomeno sembra verificarsi con Firefox, Safari e Opera. Chrome si comporta come mi aspetterei (ad esempio, quando si fa clic sul collegamento posteriore, ottengo il nuovo caricamento della pagina). La pagina CM utilizza javascript:history.go(-1) per rimandarmi indietro.

risposta

2

Non ho idea di Campaign Monitor, ma perché non forzare la chiusura del vostro fancybox sul caricamento del documento?

$(document).ready(function(){ 
    $.fancybox.close(true); 
} 
+0

Il problema è quando faccio clic sul collegamento CM (che utilizza 'javascript: history.go (-1)') per tornare indietro, la pagina non viene ricaricata, perché sto usando un popup AJAX fancyBox. Sembra esistere nello stesso stato di quando l'ho lasciato. E dal momento che sto usando una pagina HTML per il contenuto, aggiungendo la funzione close a quella che chiude la fancyBox prima che possa aprirsi. – nicorellius

+0

history.go (-1) dovrebbe anche ricaricare la pagina. Puoi provare ad allegare al callback 'completo' piuttosto che al successo. O invece che all'interno della chiamata .ajax, è possibile chiamare .close subito dopo la chiamata .ajax. Presumo che lancerà la tua chiamata ajax con fancybox chiusa –

2

Sembra che si potrebbe volere il codice della risposta a questo: How to close fancybox after Ajax Submit?

(Ecco la parte estratta & modificato)

var fancyboxProxy = $.fancybox; //declared before $.ajax 

//and then modify your success to: 
success : function() { 
      fancyboxProxy.close(); 
     } 

vorrei anche provare un semplice alert() o conosle.log() nella funzione di successo per determinare se si sta ricevendo l'evento di successo, se si riceve l'evento, allora si sa che è specificamente un problema con il codice che si sta utilizzando per nascondere la f ancybox.

+0

Grazie per la risposta. Sono andato avanti e ho provato quello che mi hai suggerito. Come sospetto, la mia funzione di successo non sembra essere chiamata, poiché 'alert()' e 'console.log()' non stanno dando nulla. – nicorellius

+0

stai usando firebug per eseguire il debug del tuo javascript? Dovresti guardare la console mentre esegui il test in quanto potrebbe essere semplicemente un errore JS da qualche parte che sta causando il mancato avvio dell'evento di successo? – acSlater

+0

Prova anche ad aggiungere un gestore di errori e a vedere che cosa sta arrivando l'errore - http: // jsfiddle.net/YAAJd/1/- questo fallirà in jsfiddle con un errore a causa di politiche interdominio, ma si applicherà al tuo codice e fammi sapere i risultati! – acSlater

Problemi correlati