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 アニメーションを失う) にのみ機能します :(