2011-09-15 9 views
19

私はログインフォームの送信を防ぐために、サーバーにクエリを行い、ユーザー名とパスワードを確認してから、ホームページ。私が経験したjQueryのプログラマだが、これに遭遇したことがないevent.preventDefault()jQuery Mobile .live()イベントでフォームの送信を妨げない

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

:login.htmlとで

:app.jsで

 <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> 

はここに関連するコードです。 changePage()は機能しますが、フォームが送信された後にのみ、不必要なページの読み込みが行われます。

EDIT:解決策が見つかりました。

フォーム提出を自分で処理したい場合は、data-ajax = "false"をフォームに追加する必要がありました。これはうまくいった。

新しいマークアップ:

 <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

あなたはjQueryのモバイルのどのバージョンを使用していますか? –

+0

jQuery Mobile 1.0b3。 –

答えて

14

私自身の質問です。フォーム提出を自分で処理したい場合は、data-ajax = "false"をフォームに追加する必要がありました。これはうまくいった。

新しいマークアップ:

<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

この問題を抱えている人は、イベントハンドラ内でevent.preventDefault()を設定すると、ajaxが設定されているかどうかに関係なく、フォームが送信されないようにすることができます。 jquery mobile 1.3.1を使用しています – Prusprus

+2

はい、そうです。しかしそれは私のためではなく、1.3.1も使っています。データを追加した後でのみ、ajax = "false"となりました。 – sp00n

0

は、ID = "提出" と何が起こるか見に送信ボタンにIDを変更してみてください。 jQuery Mobileの既知の問題である可能性があります。

+0

ありがとうございます。 –