我正在尝试学习jQuery Mobile的jQuery表单验证。我一直遇到this tutorial,我试图复制但是必须在资源链接上做错了导致html看起来很好。理论上,当用户点击进入并且电子邮件和密码字段为空时,应该出现一条消息,告诉用户“此字段是必需的”。
以下是整个代码:
<html>
<head>
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.css" />
<script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
<script src="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script type="text/javacsript">
$( "#frmLogin" ).validate({
submitHandler: function( form ) {
alert( "Call Login Action" );
}
});
</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>
</head>
<body>
<div data-role="page" id="login">
<div data-role="header">
<h1>Acme Corporation</h1>
</div>
<div data-role="content">
<form id="frmLogin">
<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>
答案 0 :(得分:5)
通常,您在DOM ready事件处理程序中初始化任何jQuery插件。这可以确保在调用和初始化.validate()
之前构造HTML。如您所见,您在HTML表单存在之前调用它。将它放在ready事件处理程序中会阻止代码在页面的HTML完全构造之后触发。
由于您正在使用jQuery Mobile(它使用ajax
加载页面),请使用这样的.on('pageinit')
处理程序...
$(document).on('pageinit', function() { // <-- ensures the DOM is ready
$("#frmLogin").validate({
// your rules & options
});
});
工作演示:http://jsfiddle.net/5p9N5/
在浏览器中,执行“查看源”of this page,了解如何正确包含脚本。 http://jsfiddle.net/5p9N5/show/ ....
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>jsFiddle demo</title>
<link rel="stylesheet" type="text/css" href="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.css">
<link rel="stylesheet" type="text/css" href="/css/result-light.css">
<script type='text/javascript' src='http://code.jquery.com/jquery-1.8.3.js'></script>
<script type="text/javascript" src="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.js"></script>
<script type='text/javascript' src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js"></script>
<script type='text/javascript'>
//<![CDATA[
$(document).on('pageinit', function(){
$('#myform').validate({ // initialize the plugin
// rules & options
});
});
//]]>
</script>
</head>
<body>
<form id="myform">
.....
</form>
</body>
</html>
对于非jQuery移动网页,您通常将jQuery代码包含在.ready()
这样的处理程序中......
$(document).ready(function() { // <-- ensures the DOM is ready
$("#frmLogin").validate({
// your rules & options
});
// any other jQuery
});