1

我正在尝试学习 jQuery Mobile 的 jQuery 表单验证。我不断遇到本教程,我正在尝试复制该教程,但资源链接肯定有问题,导致 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>
4

1 回答 1

5

通常,您会在 DOM 就绪事件处理程序中初始化任何 jQuery 插件。这确保了在.validate()调用和初始化之前构建 HTML。如您所见,您在 HTML 表单存在之前调用了它。将它放在一个就绪事件处理程序中可以防止代码在页面的 HTML 完全构建之前触发。

由于您使用的是 jQuery Mobile(它用于ajax加载页面),因此请使用这样的.on('pageinit')处理程序...

$(document).on('pageinit', function() { // <-- ensures the DOM is ready

    $("#frmLogin").validate({
        // your rules & options
    });

});

工作演示:http: //jsfiddle.net/5p9N5/

在您的浏览器中,执行此页面的“查看源代码”以查看脚本是如何正确包含的。 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

});
于 2013-03-28T19:35:36.727 回答