我正在学习 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 动画)时它才有效,我快疯了:(