2012-01-06 15 views
6

Ho il seguente ascoltatore impostato per un link sulla home page "pagebeforechange" (molto simile al proprio codice della documentazione jQuery Mobile) e che chiama http://localhost/#product?id=255979jQuery Mobile "pagebeforechange" essere chiamato due volte

//Bind Listener for Product Details 
$(document).bind("pagebeforechange", function(e, data) { 
    //Only Run If Site is Initialized 
    if(ajaxSite.options.initialized) { 
     if (typeof data.toPage === "string") { 
      var u = $.mobile.path.parseUrl(data.toPage), 
       pl = /^#product/; 

      if (u.hash.search(pl) !== -1) { 
       console.log("showProduct being called."); 
       ajaxSite.showProduct(u, data.options); 
       e.preventDefault(); 
      } 
     } 
    } 
}); 

Quando apro la console JavaScript e clicca sul link che sto vedendo il seguente:

showProduct being called. 
showProduct being called. 

io non riesco a trovare nulla sul perché sarebbe sempre chiamato due volte. Ho visto altri errori in cui vclicks viene registrato due volte a causa del clic marginale, ma questo non ha senso dal momento che si basa sul cambio di pagina effettivo.

+0

Si sta eseguendo un layout di pagina singola o multipagina? http://jquerymobile.com/demos/1.0/docs/pages/index.html Il motivo per cui ti chiedo è che stai vincolando a $ (documento) invece del pageId –

+0

Layout pagina multiplo: il metodo "showProduct()" carica le informazioni nella seconda pagina, quindi le transizioni. – Jack

+0

Mi chiedo visto che stai vincolando il $ (documento) che viene chiamato più volte, potresti semplicemente usare il pageId e testare? –

risposta

6

Dal momento che stai legame con il $ (document) e utilizzando un layout multi-pagina

Penso jQm sta caricando il documento più volte (solo un'intuizione)

Passare usando l'pageId invece, esempio:

$(document).bind("pagebeforechange", function(e, data) { ... 

a

$('#pageId').bind("pagebeforechange", function(e, data) { ... 
+3

Per me l'evento non viene attivato quando si inserisce il pageId usando v1.0 ... (vedi anche http://stackoverflow.com/questions/8793403/jquery-mobile-cant-bind-pagebeforechange-to-page- id) – Lincoln

+0

binding to pageId non attiva l'evento –

+0

@JihoKang se si pubblica una domanda con parte del codice che si sta utilizzando, sarebbe probabilmente più semplice aiutarla in questo modo –

4

Forse un po 'tardi, ma qui è la mia supposizione:

Qualsiasi evento pagechange innesca due transizioni, un "in avanti" (pagechange) e un "indietro" (hashchange). Se vai avanti, l'hashChange è bloccato, se vai indietro, è il contrario.

Controllare il codice sorgente di jqm e controllare la proprietà ignoreNextHashChange.

Questo è responsabile del blocco di hashChange sulle transizioni in avanti, altrimenti si andrebbe avanti e indietro.

Immagino che la funzione stia sparando due volte, perché entrambi gli eventi sono entrambi attivati ​​da changePage e hashChange.

In questo caso, JQM dovrebbe bloccare il rohinget hashChange prima di attivare questo evento.

+0

Ti sto dando un punto poiché questo è un consiglio utile, ma in realtà ho capito il problema un po 'di tempo fa :-). Il problema doveva fare preventREefault() non in esecuzione mentre si chiamava ancora manualmente una modifica di pagina. Avevo un metodo con una chiamata AJAX al di sopra di preventDefault() e un errore con AJAX non veniva gestito correttamente e il metodo preventDefault() non veniva mai chiamato. Errore stupido, ma mi stava facendo impazzire dopo averlo guardato per 6 ore. Avevo davvero bisogno di un altro paio di occhi per dirmi cosa continuavo a saltare. Grazie! – Jack

3

Viene chiamato due volte dal design. http://api.jquerymobile.com/pagebeforechange/

se data.toPage è impostato su una stringa, l'evento indica che la navigazione sta per iniziare.

se data.toPage è impostato su un oggetto jQuery, l'evento indica che la pagina di destinazione è stata caricata.

+0

Leggi la domanda. Il codice pubblicato mostra il filtro su (typeof data.toPage === "stringa"). Viene mostrato che l'evento passa quel condizionale due volte. Questo problema è più complesso. – janoside

+0

questa è un'informazione utile per coloro che non lo sanno, ma a causa del modo in cui è stata formulata non lo invierò di nuovo a zero –

Problemi correlati