0

jQuery Mobile を使って、最も単純な単一ページ テンプレート アプリケーション (メイン ページと小さなフォーム) を構築しています。このフォームには、必須にしたい単一のテキスト フィールドがあります。

フォームページへのリンクは次のとおりです。

<a href="form.html">Form</a>

フォーム ページには、jquery 検証プラグイン (もちろんその前の jquery)、検証スクリプト、必須フィールド、送信ボタンなど、すべての重要な要素があります。

<script type="text/javascript" src="js/jquery.validate.min.js"></script>
<script>
$(document).ready(function(){
$("#field").validate();
});
</script>
<input type="text" id="field" name="field" class="required" required>
<input id="submit" class="submit" type="submit" value="Inserisci" data-theme="a"/>

通常のリンクを使用してフォーム ページに入ると、検証は行われません (フォーム アクションがまだ設定されていないため、単純なページのリロード)。フォームのリンクを次のように変更すると:

<a href="form.html" data-ajax=false>Form</a>

検証が機能し、必須フィールドにデータを挿入するように指示されます。しかし、データを挿入しても、フォームを送信せずに挿入を求め続けます。

何がいけないのか本当に理解できない…

最初の提案の後、私は読み続け、次の例でコードを更新しました:http://jquery.bassistance.de/validate/demo/jquerymobile.html問題は、私が強制的に更新することですフォーム ページを開き、検証が機能していることを確認します。フォームにつながるリンクで data-ajax=false を使用すると、検証は常に完全に機能します。

更新: すべてが可能な限り「バニラ」であることを確認するために、jqueryドキュメントからメインテンプレートを開始ページ、私のindex.htmlとして取得しました:

<!DOCTYPE html>
<html>
<head>
        <title>My Page</title>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.0-beta.1/jquery.mobile-1.3.0-beta.1.min.css" />
        <script src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
        <script src="http://code.jquery.com/mobile/1.3.0-beta.1/jquery.mobile-1.3.0-beta.1.min.js"></script>
</head>
        <body>
                <div data-role="page" id="cruscotto">
                        <div data-role="header" id="header">
                                <h1>page</h1>
                        </div><!-- /header -->
                        <div data-role="content">
                                <ul data-role="listview" data-inset="true" data-theme="a">
                                        <li>
                                                <a href="inserisci_clienti.html">Inserimento clienti</a>
                                        </li>
                                        <li>
                                                <a href="ricerca_clienti.html">Ricerca clienti</a>
                                        </li>
                                        <li>
                                                <a href="about.html">Gestione pagamenti</a>
                                        </li>
                                </ul>
                        </div><!-- /content -->
                          <div data-role="footer" data-theme="a">
            <div class="ui-bar">
             <a href="" data-role="button" data-icon="arrow-u" data-theme="a" style="float:right;" class="returnTopAction">Torna su</a>
           </div>
          </div>
                </div>
        </body>
</html>

そして、チュートリアルである inserisci_clienti.html ページから完全に機能するフォームを取得しました。

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title> - jsFiddle demo</title>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.0-beta.1/jquery.mobile-1.3.0-beta.1.min.css" />
        <script src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
        <script src="http://code.jquery.com/mobile/1.3.0-beta.1/jquery.mobile-1.3.0-beta.1.min.js"></script>



  <style type='text/css'>
    label.error {
    color: red;
    font-size: 16px;
    font-weight: normal;
    line-height: 1.4;
    margin-top: 0.5em;
    width: 100%;
    float: none;
}

@media screen and (orientation: portrait){
    label.error { margin-left: 0; display: block; }
}

@media screen and (orientation: landscape){
    label.error { display: inline-block; margin-left: 22%; }
}

em { color: red; font-weight: bold; padding-right: .25em; }


  </style>

<script type='text/javascript'>//<![CDATA[
$(window).load(function(){
$( "#frmLogin" ).validate({
    submitHandler: function( form ) {
        alert( "Call Login Action" );
    }
});

});//]]>

</script>


</head>
<body>
  <meta name="viewport" content="width=device-width, initial-scale=1">

<div data-role="page" id="login">

    <div data-role="header">
        <h1>Acme Corporation</h1>
    </div>

    <div data-role="content">

        <form id="frmLogin" class="validate">
            <div data-role="fieldcontain">
                <label for="email"><em>* </em> Email: </label>
                <input type="text" id="email" name="email"
                    class="required email" />
            </div>

            <div data-role="fieldcontain">
                <label for="password"><em>* </em>Password: </label>
                <input type="password" id="password" name="password"
                    class="required" />
            </div>
            <div class="ui-body ui-body-b">
                <button class="btnLogin" type="submit"
                    data-theme="a">Login</button>
            </div>
        </form>
    </div>
</div>
</body>
</html>

言うまでもなく、フォームページを読み込んだ後にフォームページをリロードし場合、またはフォームにつながるリンクに data-ajax=false OR rel="external" を配置した場合 (jQuery アニメーションを失う) にのみ機能します :(

4

2 に答える 2