2012-02-16 14 views
7

Sto usando jquery mobile per costruire un sito ma quando clicco su un pulsante e questo pulsante punta a una pagina di dialogo, nell'URL appare #&ui-state=dialog. Se inserisco l'<a data-ajax="false"></a> l'url è corretto senza #&ui-state=dialog ma la finestra di dialogo non viene visualizzata correttamente perché ovviamente ajax è disabilitato. C'è qualche modo per risolverlo?correggere l'url usando jquery mobile

risposta

1

Quando si apre la finestra di dialogo, utilizzare $.mobile.changePage() e impostare l'opzione changeHash-false: http://jquerymobile.com/demos/1.0.1/docs/api/methods.html

//delegate the event binding so elements in the DOM now and in the future will be bound-to 
$(document).delegate('#my-dialog-button', 'click', function() { 

    //change to the dialog, forcing the hash to remain the same and the page to be viewed as a dialog 
    $.mobile.changePage($('#my-dialog'), { 
     changeHash : false, 
     role  : 'dialog' 
    }); 
}); 
+0

bene le opere di funzione, ma in questo modo la pagina viene mostrato solo come una pagina e non più come una finestra di dialogo come se l'Ajax è stata disabilitata –

+0

Ecco una demo: http://jsfiddle.net/qzzW5/. La pagina si apre come una finestra di dialogo in ogni browser che ho testato. – Jasper

+0

Ho provato il mio esempio nel jsfiddle e funziona correttamente. Ma nella mia pagina non funziona. Forse potrebbe essere perché ho usato in una pagina in precedenza per pubblicare un modulo data-ajax = "falso"? –

1

Non so perché, ma Jasper esempio non funziona quando provo integrandolo troppo.

Stavo usando gli attributi data-* sul pulsante per la configurazione della finestra di dialogo.

Ora dichiaro tutte le opzioni nella funzione changePage e funziona correttamente.

<a href="#" data-role="button" id="#my-dialog-button"></a> 

$("#my-dialog-button").click(function() { 
    $.mobile.changePage("page_containing_the_dialog.html", { 
     type: "get", 
     transition: 'pop', 
     role: 'dialog', 
     changeHash : false 
    }); 
}); 
17

Cercare di utilizzare i dati-history = "false" nel tag div popup come:

<div data-history="false" data-role="popup" id="options-list-div" data-theme="b" data-overlay-theme="b"> 

Buona fortuna! :-)

+0

lo aggiusta per me :) Grazie – Roshdy

+0

Benvenuto, felice di aiutarti :-) –

+0

Per me non funziona .. Se aggiungo data-history = "false" non aggiunge la finestra di dialogo # & ui-state = ma va comunque torna alla prima pagina e non si sposta alla successiva esattamente come prima (dopo un po 'dovrebbe spostarsi su una nuova pagina).E se aggiungo il "changeHash" all'interno della funzione changePage non succede nulla .. – ayasha

0

L'utilizzo di changeHash disabilita la modifica della cronologia perché l'URL non verrà modificato. Quindi, se l'utente fa clic/tocca il pulsante di chiusura, si propagherà alla pagina precedente se ce n'era.

Inoltre esso potrebbe causare un problema quando l'utente tocca il pulsante indietro sul cellulare in quanto non v'è stato alcun cambiamento storico in cui è stato aperto il popup, sarebbe ancora una volta portare l'utente torna alla pagina precedente, piuttosto che chiudere il pop-up , che sarebbe un comportamento scorretto.

Invece di changeHash se usiamo transition che avrebbe funzionato come una finestra e lasciare che l'hash cambiare la storia troppo.

@Vincentp hai provato a rimuovere la proprietà changeHash dalla chiamata 'changePage', ora che stai usando transition?

$("#my-dialog-button").click(function() { 
    var default_transition = "pop"; 
    $.mobile.changePage("page_containing_the_dialog.html", { 
     role : 'dialog', 
     transition: $(this).data('transition') || default_transition 
    }); 
    return false; 
});