2011-02-08 8 views
5

Ho deciso di passare al framework jQuery Mobile per un tema mobile abilitato per Wordpress.jQuery Mobile e invio moduli

Attualmente sto eseguendo il problema di inviare moduli con il tag hash nell'url e provare a fare la convalida e la registrazione ajax. Fondamentalmente non funziona.

es: website.com/contact/ < - opere website.com/#/contact/ < - non funziona

Sono consapevole del tag rel = "esterno" per il href che eliminano il # dall'URL. Ma ho post di blog con un plug-in personalizzato che rende i moduli di iscrizione che non sarò in grado di usare il rel = "external" per. Credo che potrei usarlo per tutti i collegamenti, ma ciò eliminerebbe le transizioni fluide.

Quali sono le mie opzioni per provare a farlo funzionare? Sto cercando di associare il .submit al modulo, fare una convalida e poi ajax pubblicarlo.

Update--

<form id="myform" action="myfile.php" method="post"> 
<input type="text" id="mytext" name="mytext" /> 
<input type="submit" id="myform_submit" value="Submit"> 
</form> 

e il mio script:

jQuery(document).ready(function() { 
jQuery("#contact_submit").submit(function(){ 
     alert('WTF'); 
     }); 
}); 

cambiato a:

<form id="myform" action="myfile.php" method="post"> 
<input type="text" id="mytext" name="mytext" /> 
<input type="button" id="myform_submit" value="Submit"> 
</form> 

e il mio script:

jQuery(document).ready(function() { 
jQuery("#contact_submit").click(function(){ 
     alert('WTF'); 
     }); 
}); 

Entrambi non funzionano con il # nell'URL.

Ho anche aggiunto questo prima che il file jquery.mobile.js:

<script type="text/javascript"> 
jQuery(document).bind(
    "mobileinit", function(){ 
    jQuery.extend(jQuery.mobile, { ajaxFormsEnabled: false }); 
    }); 
</script> 

ancora non va.

(FYI il jQuery invece di $ è a causa di WordPress)

aggiornamento --another.

Dal momento che sto usando Wordpress alcune delle funzioni si comportano in modo strano. Mi piace is_home(). Indipendentemente dal fatto che la "pagina" in cui mi trovo sulla funzione ritorni vera. Penso che questo abbia a che fare con le chiamate ajax per ogni pagina.

risposta

2

È possibile disattivare il ritorno AJAX. Leggi qui: http://jquerymobile.com/demos/1.0a3/#docs/api/globalconfig.html

Inoltre - ho visto qualcosa di problemi con i tagli, ma ora non riesco a trovare, in modo da essere sicuri di utilizzare la versione di alpha3 jQm

[modifica]

Questo è stato citato alcune volte prima - in alcuni altri thread. Se vai a una pagina e JQM lo carica con AJAX, allora viene preso solo body E NESSUN documento.si spara, dato che il dom è già pronto;) (Mi sto citando qui)

+0

Non so se è così. Ho cambiato a e ho aggiunto un gestore di clic con solo un avviso. No vai con il # nell'URL. Senza di esso sono i soldi. – jdruid

+0

Non provare a fare scherzi con il modulo. Disabilitare AJAX dovrebbe funzionare. Puoi provare a sperimentare versioni - confronta jqm alpha2 e alpha3 con quello (attenzione: alpha2 ha impostazioni diverse) – naugtur

+0

Hmm. Potrei aspettare di usare jQuery fino a qualche altra versione. Ho disabilitato l'AJAX ma ancora senza fortuna. Funziona bene senza il # nell'URL. Una volta che è lì non va. Presumo che questa sia una cosa di sicurezza integrata nel browser web. :( – jdruid

7

Non sono del tutto sicuro dove stai chiamando la tua funzione jQuery.ready ma il modo consigliato per registrare i gestori è legando l'evento pagecreate per le tue pagine specifiche. Gli eventi pagecreate devono essere gestiti da jQuery.ready solo nella prima pagina.Di recente ho creato un sito usando jQuery mobile e mi sono imbattuto esattamente in questo problema. Il seguente codice dovrebbe arrivare dove si vuole essere:

jQuery(document).ready(function() { 
    $("#id_of_page").live('pagecreate', function() { 
     $("form").submit(function(event) { 
      event.stopPropagation(); 
      event.preventDefault(); 

      // Do stuff here (usually AJAX); 

      return false; 
     }); 
    }); 
}); 

Purtroppo, non ho sperimentare abbastanza per determinare se tutto ciò che è necessario. So che questo ha fatto il trucco per me. Aggiungo quasi istintivamente il numero return false a tutti i miei moduli inviati gestiti da AJAX. Spero che questo aiuto!

+1

FYI: probabilmente vorrai 'pageinit' invece di' pagecreate' ora (http://jquerymobile.com/demos/1.1.1/docs/api/events.html) –