2014-04-15 19 views
1

我一直在尋找這麼長的解決方案,而不是data-ajax="false",因爲這對我沒有用。jQuery Mobile在多頁文檔提交表單時保持加載第一頁

無論如何,在我的Phonegap應用程序中,當我使用jquery mobile提交表單時,我需要通過jquery中的常規提交函數來運行它,以便在它進入服務器之前操縱它。

我在電話上第一次對它進行加密,然後它進入數據庫以更安全。

無論如何,在我需要使用JQM切換到多頁面方法之前,我可以提交一個表單,它不會提交任何問題。

但是,當我只將HTML更改爲多頁設置時,我所得到的只是對登錄屏幕(第一頁)的刷新,無論我在那裏還是正在註冊。

此外,在測試中,如果我嘗試提醒任何事情,在函數內部或不顯示任何內容,那麼測試路線對我來說不起作用。

最重要的是我得到表單提交。

還有一件事,當我把代碼放在jsfiddle中時,所有東西,警報和所有東西都完美地工作。

所以我不知道它是否是phonegap或不。

JS小提琴鏈接 - http://jsfiddle.net/copilot0910/mVgLJ/

代碼

HTML

<h1>Login</h1> 

        <label for="uname">Username:</label> 
        <input type="text" name="uname" id="uname" value="" autocomplete="off" autocapitalize="off" /> 
        <label for="pword">Password:</label> 
        <input type="password" name="pword" id="pword" value="" /> 
        <input type="submit" value="Login" name="login_submit_btn" id="login_submit_btn" /> 
       </form> 
<a href="#register" class="ui-btn ui-shadow ui-corner-all ui-mini">Go Register</a> 

      </div> 
     </div> 
     <div id="register" data-role="page"> 
      <div data-role="content"> 
       <form id="register_form"> 

<h1>Register</h1> 

        <label for="uname_reg">Wanted Username:</label> 
        <input type="text" name="uname_reg" id="uname_reg" value="" autocomplete="off" autocapitalize="off" /> 
        <label for="pword_reg">Password:</label> 
        <input type="password" name="pword_reg" id="pword_reg" value="" /> 
        <label for="email_reg">Email:</label> 
        <input type="email" name="email_reg" id="email_reg" value="" autocomplete="off" autocapitalize="off" /> 
        <label for="fname_reg">First Name:</label> 
        <input type="text" name="fname_reg" id="fname_reg" value="" autocomplete="off" autocapitalize="off" /> 
        <label for="lname_reg">Last Name:</label> 
        <input type="text" name="lname_reg" id="lname_reg" value="" autocomplete="off" autocapitalize="off" /> 
        <input type="submit" value="Register" /> 
<a href="#login" class="ui-btn ui-shadow ui-corner-all ui-mini ui-btn-inline">Go Login</a> 

<a href="#tac" data-rel="popup" class="ui-btn ui-corner-all ui-shadow ui-btn-inline ui-mini" data-transition="pop">You Accept our Terms</a> 

       </form> 
      </div> 
     </div> 
    </div> 
</body> 

jQuery的

document.addEventListener("deviceready", onDeviceReady, false); 

function onDeviceReady() { 
    $(document).ready(function() { 
     $("#login_form").submit(function() { 
      event.preventDefault(); 

      alert("Login Alert"); 

      $("#uname").blur(); 
      $("#pword").blur(); 
      $("#uname_reg").blur(); 
      $("#pword_reg").blur(); 
      $("#email_reg").blur(); 
      $("#fname_reg").blur(); 
      $("#lname_reg").blur(); 

      var NoHashPwd = $("#pword").val(); 
      var pwd = hex_sha512(NoHashPwd); 
      var usrname = $("#uname").val(); 

      var loginData = { 
       "uname": usrname, 
        "p": pwd 
      }; 

      $.ajax({ 
       type: "POST", 
       url: "Not Telling", 
       data: loginData, 
       cache: false, 
       async: false, 
       dataType: "json", 
       success: function (resp) { 
        if (resp.msg === "good") { 
         doGeolocate(); 
        } else { 
         alert(resp.msg); 
        } 

        $("#uname").val(""); 
        $("#pword").val(""); 
        $("#uname_reg").val(""); 
        $("#pword_reg").val(""); 
        $("#email_reg").val(""); 
        $("#fname_reg").val(""); 
        $("#lname_reg").val(""); 

        return false; 
       } 
      }); 
     }); 

     $("#register_form").submit(function() { 
      event.preventDefault(); 

      alert("Login Alert"); 

      $("#uname").blur(); 
      $("#pword").blur(); 
      $("#uname_reg").blur(); 
      $("#pword_reg").blur(); 
      $("#email_reg").blur(); 
      $("#fname_reg").blur(); 
      $("#lname_reg").blur(); 

      var NoHashPwd = $("#pword_reg").val(); 
      var p = hex_sha512(NoHashPwd); 
      var uname = $("#uname_reg").val(); 
      var fname = $("#fname_reg").val(); 
      var lname = $("#lname_reg").val(); 
      var email = $("#email_reg").val(); 

      var regData = { 
       "uname": uname, 
        "p": p, 
        "fname": fname, 
        "lname": lname, 
        "email": email 
      }; 

      $.ajax({ 
       type: "POST", 
       url: "Not Telling", 
       data: regData, 
       cache: false, 
       async: false, 
       dataType: "json", 
       success: function (resp) { 
        if (resp.flag === "good") { 
         doGeolocate(); 
        } else { 
         alert(resp.flag); 
        } 

        $("#uname").val(""); 
        $("#pword").val(""); 
        $("#uname_reg").val(""); 
        $("#pword_reg").val(""); 
        $("#email_reg").val(""); 
        $("#fname_reg").val(""); 
        $("#lname_reg").val(""); 

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

順便說一句,額外deviceready功能是PhoneGap的,所以離開那是。沒有造成過問題。

+0

1)使用'$(document)。on(「pageinit」,「#pageID」,function(){此頁面的代碼/處理程序等。});'而不是'.ready()'。 2)在'form'中包含登錄字段並使用'.on()'例如$(「#login_formID」)。on(「submit」,function(){reset of code});' – Omar

+0

@Omar代碼在頂部出於某種原因被封存。我有表單標籤。另外,'.on()'沒有幫助。感謝壽。 – copilot0910

回答

0

您忘記了返回錯誤;在你的submit();功能。

你把它放在Ajax回調中,你需要把它放在你的代碼提交結束,就像這樣:

$("#login_form").submit(function() { 
      event.preventDefault(); 

      alert("Login Alert"); 

      $("#uname").blur(); 
      $("#pword").blur(); 
      $("#uname_reg").blur(); 
      $("#pword_reg").blur(); 
      $("#email_reg").blur(); 
      $("#fname_reg").blur(); 
      $("#lname_reg").blur(); 

      var NoHashPwd = $("#pword").val(); 
      var pwd = hex_sha512(NoHashPwd); 
      var usrname = $("#uname").val(); 

      var loginData = { 
       "uname": usrname, 
        "p": pwd 
      }; 

      $.ajax({ 
       type: "POST", 
       url: "Not Telling", 
       data: loginData, 
       cache: false, 
       async: false, 
       dataType: "json", 
       success: function (resp) { 
        if (resp.msg === "good") { 
         doGeolocate(); 
        } else { 
         alert(resp.msg); 
        } 

        $("#uname").val(""); 
        $("#pword").val(""); 
        $("#uname_reg").val(""); 
        $("#pword_reg").val(""); 
        $("#email_reg").val(""); 
        $("#fname_reg").val(""); 
        $("#lname_reg").val(""); 

        return false; 
       } 
      }); 
      return false; // avoid to execute the actual submit of the form. 
     }); 
+0

沒有做到。它仍然只是刷新回到應用程序和js小提琴上的登錄頁面。 – copilot0910

0

沒有什麼不對您的代碼中,「deviceready」事件只有在DEVICE準備就緒時纔會觸發。 警報正在工作。對於測試使用以下內容:

$(document).ready(function() { 
"use strict"; 
onDeviceReady(); 

}); 

我冒昧地錯誤檢查您的代碼,並使它皮特恭維。 請在下面的代碼中找到完整的代碼P.S在你調用它們之前聲明函數,這就是「deviceready」調用的結尾。

/*jslint browser: true*/ 
/*global $, jQuery, alert, hex_sha512 */ 

function onDeviceReady() { 
"use strict"; 
$(document).ready(function() { 
    $("#login_form").submit(function() { 
     event.preventDefault(); 

     alert("Login Alert"); 

     $("#uname").blur(); 
     $("#pword").blur(); 
     $("#uname_reg").blur(); 
     $("#pword_reg").blur(); 
     $("#email_reg").blur(); 
     $("#fname_reg").blur(); 
     $("#lname_reg").blur(); 

     var NoHashPwd = $("#pword").val(), 
      pwd = hex_sha512(NoHashPwd), 
      usrname = $("#uname").val(), 
      loginData = { 
       "uname": usrname, 
       "p": pwd 
      }; 

     $.ajax({ 
      type: "POST", 
      url: "Not Telling", 
      data: loginData, 
      cache: false, 
      async: false, 
      dataType: "json", 
      success: function (resp) { 
       if (resp.msg === "good") { 
        alert("good"); 
        //doGeolocate(); 
       } else { 
        alert(resp.msg); 
       } 

       $("#uname").val(""); 
       $("#pword").val(""); 
       $("#uname_reg").val(""); 
       $("#pword_reg").val(""); 
       $("#email_reg").val(""); 
       $("#fname_reg").val(""); 
       $("#lname_reg").val(""); 

       return false; 
      } 
     }); 
    }); 

    $("#register_form").submit(function() { 
     event.preventDefault(); 

     alert("Login Alert"); 

     $("#uname").blur(); 
     $("#pword").blur(); 
     $("#uname_reg").blur(); 
     $("#pword_reg").blur(); 
     $("#email_reg").blur(); 
     $("#fname_reg").blur(); 
     $("#lname_reg").blur(); 

     var NoHashPwd = $("#pword_reg").val(), 
      p = hex_sha512(NoHashPwd), 
      uname = $("#uname_reg").val(), 
      fname = $("#fname_reg").val(), 
      lname = $("#lname_reg").val(), 
      email = $("#email_reg").val(), 
      regData = { 
       "uname": uname, 
       "p": p, 
       "fname": fname, 
       "lname": lname, 
       "email": email 
      }; 

     $.ajax({ 
      type: "POST", 
      url: "Not Telling", 
      data: regData, 
      cache: false, 
      async: false, 
      dataType: "json", 
      success: function (resp) { 
       if (resp.flag === "good") { 
        //doGeolocate(); 
        alert("success"); 
       } else { 
        alert(resp.flag); 
       } 

       $("#uname").val(""); 
       $("#pword").val(""); 
       $("#uname_reg").val(""); 
       $("#pword_reg").val(""); 
       $("#email_reg").val(""); 
       $("#fname_reg").val(""); 
       $("#lname_reg").val(""); 

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

$(document).ready(function() { 
"use strict"; 
onDeviceReady(); 

}); 

document.addEventListener("deviceready", onDeviceReady, false); 
+0

'deviceready'在底部是一個很好的建議,但是這沒有幫助。我只是想知道是否因爲jQuery Mobile和多個頁面造成問題。這並沒有解決警報問題。 – copilot0910

相關問題