2011-09-15 14 views
19

Próbuję zapobiec wysyłaniu formularzy logowania, więc mogę wysłać zapytanie do serwera, zweryfikować nazwę użytkownika i hasło, a dopiero potem przejść do strona główna.event.preventDefault() nie blokuje przesyłania formularza w jQuery Mobile .live() event

Oto odpowiedni kod:

W login.html:

 <form id="login-form"> 
      <input type="text" name="login-username" id="login-username" value="" placeholder="Username" /> 
      <input type="password" name="login-password" id="login-password" value="" placeholder="Password" /><br /> 
      <button id="cab-submit" type="submit" data-theme="a" data-inline="true">Log In</button> 
     </form> 

W app.js:

$("#login-form").live("submit", function(event) { 
     event.preventDefault(); 
     $.mobile.changePage("main.html", { 
      transition: "fade" 
     }); 
    }); 

Jestem doświadczony programista jQuery, ale nigdy nie napotkasz ten . Funkcja changePage() działa, ale dzieje się tylko po przesłaniu formularza, co powoduje niepotrzebne ładowanie strony.

EDYCJA: Znaleziono rozwiązanie.

Musiałem dodać dane-ajax = "false" do formularza, jeśli chcę sobie poradzić z wysyłką formularza siebie. To działało dobrze.

Nowe znaczniki:

 <form id="login-form" data-ajax="false"> 
      <input type="text" name="login-username" id="login-username" value="" placeholder="Username" /> 
      <input type="password" name="login-password" id="login-password" value="" placeholder="Password" /><br /> 
      <button id="cab-submit" type="submit" data-theme="a" data-inline="true">Log In</button> 
     </form> 
+0

Jaka wersja jQuery mobilne są używasz? –

+0

jQuery Mobile 1.0b3. –

Odpowiedz

14

Odpowiedź na moje własne pytanie. Musiałem dodać do formularza dane-ajax = "false", jeśli chcę sobie poradzić z wysyłaniem formularza. To działało dobrze.

Nowe znaczniki:

<form id="login-form" data-ajax="false"> 
     <input type="text" name="login-username" id="login-username" value="" placeholder="Username" /> 
     <input type="password" name="login-password" id="login-password" value="" placeholder="Password" /><br /> 
     <button id="cab-submit" type="submit" data-theme="a" data-inline="true">Log In</button> 
    </form> 
+0

Dla każdego potykającego się o to pytanie, ustawienie event.preventDefault() w twojej procedurze obsługi zdarzenia powinno wystarczyć, aby zapobiec wysyłaniu formularza, niezależnie od tego, czy formularz jest ustawiony w języku ajax, czy nie; Używam jquery mobile 1.3.1 – Prusprus

+2

Tak, powinno być. Jednak nie jest to dla mnie i używam także wersji 1.3.1. Dopiero po dodaniu danych-ajax = "false" zadziałało. – sp00n

0

Spróbuj zmienić identyfikator na przycisk Prześlij do id = "submit" i zobaczyć, co się dzieje. Wygląda na to, że może to być znany problem z aplikacją jQuery mobile.

+0

Dzięki - wypróbowałem to już, bez pracy. –

Powiązane problemy