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

2

这是在 jQuery Mobile 中正确使用 jQuery.validate。

$(document).on('pageinit', function () {
 $(form).validate({ // or form #id
  rules: {
   field: "required" // field name not #id and has class="required
   },
   submitHandler: function (form) {
    alert('data submitted');
    return false;
   }
 });
});
于 2013-04-13T09:40:50.843 回答
0

验证应应用于不在输入中的表单。请尝试以下操作:

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

更多信息:http ://docs.jquery.com/Plugins/validation

于 2013-04-12T23:41:45.403 回答