jQuery 插件:验证 - 标签被隐藏

2024-04-21

我使用以下代码jQuery 插件:验证 http://bassistance.de/jquery-plugins/jquery-plugin-validation/:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>

<style type="text/css">
div.formerror
{
    color: red;
    margin-bottom: 6px;
    margin-top: 1px;
}
input.error, select.error, label.error
{
    border: 2px solid red;
    background-color: #FFFFD5;
    margin: 0px;
    color: red;
}
</style>


<!--   <script src="http://code.jquery.com/jquery-latest.js"></script> -->
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>

<script type="text/javascript" src="http://jzaefferer.github.com/jquery-validation/jquery.validate.js"></script>
<script type="text/javascript">

 $(document).ready(function(){
        $('#edit_form').validate({
            rules: {
                chooseMe: "required"
            },
            messages: {
                chooseMe: ""
            },

            messages: {
                name: "Name is missing",
                email: {
                    required: "E-mail address is missing",
                    email: "Your email address is not valid"
                }
            },


            highlight: function(element, errorClass, validClass) {
                $(element).addClass(errorClass).removeClass(validClass);
                $(element.form).find('[name='+element.name+']').each(function (i, sameName){
                   $(element.form).find("label[for=" + sameName.id + "]").addClass(errorClass); 
                });
            },
            unhighlight: function(element, errorClass, validClass) {
                $(element).removeClass(errorClass).addClass(validClass);
                $(element.form).find('[name='+element.name+']').each(function (i, sameName){
                   $(element.form).find("label[for=" + sameName.id + "]").removeClass(errorClass); 
                });
            },
            submitHandler: function(form) {
                $("#edit_form div.formerror").hide();
                alert("validated successfully - submit handler here");
            },
            invalidHandler: function(e, validator) {
                var errors = validator.numberOfInvalids();
                if (errors) {
                    var message = 'There are missing or invalid fields. They have been highlighted below.';
                    $("#edit_form div.formerror span").html(message);
                    $("#edit_form div.formerror").show();
                } else {
                    $("#edit_form div.formerror").hide();
                }
            }
        });
  });

</script>

</head>

<body>
<form class="cmxform" id="edit_form" method="get" action="">
    <div class="formerror" style="display: none">
        <span></span>
    </div>
    <fieldset>
    <legend>A simple comment form with submit validation and default messages</legend>
    <p>
     <label for="cname">Name</label>
     <em>*</em><input id="cname" name="name" size="25" class="required" minlength="2" />
    </p>
    <p>
     <label for="cemail">E-Mail</label>
     <em>*</em><input id="cemail" name="email" size="25"  class="required email" />
    </p>
    <p>
     <label for="curl">URL</label>
     <em>  </em><input id="curl" name="url" size="25"  class="phone" value="" />
    </p>
    <p>
     <label for="ccomment">Your comment</label>
     <em>*</em><textarea id="ccomment" name="comment" cols="22"  class="required"></textarea>
    </p>
    <p>
     <input class="submit" type="submit" value="Submit"/>
    </p>
    </fieldset>
</form>
</body>

</html>

它运行良好,但有两个问题:

  1. 当我提交错误、更正错误并重新提交表单时,标签会被隐藏。在这种情况下,已更正的文件是否会丢失其标签(插件放置了 display:none CSS 属性)。看起来这个 pugin 将原始标签与错误标签混合在一起,并在没有错误时隐藏它们。如何解决这个问题?
  2. 为什么对于 tesxtarea 字段,当我更正错误时,它会立即将类更改为成功(这意味着它已更正),而对于输入字段,我应该重新提交表单以便插件开始验证?

下面的代码解决了这个问题。关于第2项,请参阅此链接:jQuery 插件:验证 - 按键验证不起作用 https://stackoverflow.com/questions/9758153/jquery-plugin-validation-validation-on-key-up-does-not-work

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>

<style type="text/css">
div.formerror
{
    color: red;
    margin-bottom: 6px;
    margin-top: 1px;
}
.error
{
    border: 1px dashed red;
    background-color: #FFFFD5;
    margin: 0px;
    color: red;
}
label.errorForLabel
{
    margin: 0px;
    color: red;
}
label.error{
    visibility:hidden;
    width:0;
    height:0;
} 
</style>


<!--   <script src="http://code.jquery.com/jquery-latest.js"></script> -->
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>

<script type="text/javascript" src="http://jzaefferer.github.com/jquery-validation/jquery.validate.js"></script>
<script type="text/javascript">
var errorClassForLabel = 'errorForLabel';
 $(document).ready(function(){
        $('#edit_form').validate({

            errorClass: "error",

            validClass: "valid",

            rules: {
                name: "required",
                email: {
                    required: true,
                    email: true
                },
                url:{
                    required: true,
                    url:true
                },
                comment: "required"
            },

/*          onkeyup: true,*/

            highlight: function(element, errorClass, validClass) {
                $(element).addClass(errorClass).removeClass(validClass);
                $(element.form).find('[name='+element.name+']').each(function (i, sameName){
                   $(element.form).find("label[for=" + sameName.id + "]").addClass(errorClassForLabel); 
                });
            },

            unhighlight: function(element, errorClass, validClass) {
                $(element).removeClass(errorClass).addClass(validClass);
                $(element.form).find('[name='+element.name+']').each(function (i, sameName){
                   $(element.form).find("label[for=" + sameName.id + "]").removeClass(errorClassForLabel); 
                });
            },

            submitHandler: function(form) {
                $("#edit_form div.formerror").hide();
                alert("validated successfully - submit handler here");
            },

            invalidHandler: function(e, validator) {
                var errors = validator.numberOfInvalids();
                if (errors) {
                    var message = 'There are missing or invalid fields. They have been highlighted below.';
                    $("#edit_form div.formerror span").html(message);
                    $("#edit_form div.formerror").show();
                } else {
                    $("#edit_form div.formerror").hide();
                }
            }
        });
  });

</script>

</head>

<body>
<form class="cmxform" id="edit_form" method="get" action="">
    <div class="formerror" style="display: none">
        <span></span>
    </div>
    <fieldset>
    <legend>A simple comment form with submit validation and default messages</legend>
    <p>
     <label for="name">Name</label>
     <em>*</em><input type="text" id="name" name="name" size="25" minlength="2" />
    </p>
    <p>
     <label for="email">E-Mail</label>
     <em>*</em><input type="text"  id="email" name="email" value="" maxlength="150"  size="25"/>
    </p>
    <p>
     <label for="url">URL</label>
     <em>  </em><input type="text" id="url" name="url" size="25" value="" /> 
    </p>
    <p>
     <label for="comment">Your comment</label>
     <em>*</em><textarea id="comment" name="comment" cols="22"></textarea>
    </p>
    <p>
     <input class="submit" type="submit" value="Submit"/>
    </p>
    </fieldset>
</form>
</body>

</html>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jQuery 插件:验证 - 标签被隐藏 的相关文章

  • Rails 4 单选按钮表单助手,true 不验证

    我在 needs dist 上附加了简单的是或否单选按钮 当我提交表单时选择 否 它工作得很好 但是当我选择 是 时 它会抛出验证错误吗 它仅在 needs dist gt true 时有效 Model validates presence
  • AJAX:检查字符串是否为 JSON?

    我的 JavaScript 有时会在这一行崩溃 var json eval this responseText 当争论时会导致崩溃eval 不是 JSON 在进行此调用之前有什么方法可以检查字符串是否为 JSON 我不想使用框架 有什么方法
  • jQuery 选择下一个

    我有一个简单的div布局html 有一个函数 当鼠标悬停在className为 personal icon email 的div上时 我将调用JS函数并显示className为 img info mask 的隐藏div div class
  • 如何使 jQuery 向上动画

    我有一些 jquery 运行得相当好 但是当我将鼠标悬停在有问题的元素上时 底部向下扩展 这并不意外 但不是所需的效果 我希望元素的底部保持静止 而元素的顶部向上扩展 如果您想查看我目前拥有的内容 您可以导航至http demo ivann
  • Fancybox 画廊组

    我正在使用 fancyboxhttp fancyapps com fancybox http fancyapps com fancybox 我的问题是 我可以将不同的资源组合在一起吗 我的意思是同一画廊 或 组 中带有内嵌或视频的图像 如果
  • 如何将 gettext 字典中的术语输入 JavaScript?

    我正在尝试使用 php 和 javascript jquery 开发一个支持多种语言的网站 我正在尝试获得以下东西 高效 我需要尽可能减少这个操作的后端处理 可扩展 向翻译添加新字符串必须简单实用 问题是 我的 javascript 代码正
  • Jquery:是否有某种方法可以使 val() 返回空字符串而不是空列表的“未定义”?

    使用 Jquery 是否有某种方法可以使 val 在针对空元素列表调用时返回空字符串而不是 未定义 例如 我有这样的代码 var x my textbox id not watermark val 我的想法是 我想获取文本框的值 但如果它当
  • 使用 jQuery 提交一个又一个表单?

    如何设置自动队列系统来依次运行多个提交 我不希望他们立即提交 否则可能会破坏我的后端 PHP 脚本 这是一个简单的例子 假设每个表单都可以独立提交 并且主提交将串行运行所有表单
  • 未捕获的类型错误:无法读取 null 的属性值[重复]

    这个问题在这里已经有答案了 我是 jQuery 新手 我正在尝试创建一个登录表单 当用户输入简短的用户名时 该表单会切换文本 这是我的代码 当我单击按钮时什么也没有发生 我检查了控制台 它在我的代码中的特定行上显示了标题上的错误 我也检查了
  • 使用 jquery 删除输入占位符

    有谁知道如何使用 jquery 删除输入占位符 我想做的是如果其中之一inputbox得到一个值 所有输入框占位符都将被删除 有人知道该怎么做吗
  • 如何在提交表单时调用 jquery 函数?

    我有一个表格如下
  • 使用 JQuery 的 Grails 项目,无需插件

    我正在尝试设置一个简单的 Grails 2 1 1 应用程序 该应用程序将使用 JQuery 我有一个名为 TestController 的控制器和一个位于正确位置的index gsp 我手动添加 JQuery 库 没有使用 Grails
  • jQuery 计数具有 display:block 的 div

    我有 div 元素 如下图所示 我想要将 css 显示为块的 div 的数量 我尝试过的 1 div price listing container visible length and 2 content children div fil
  • JQuery UI Draggable - 如何知道元素是否可拖动初始化?

    我的逻辑是 if this draginited a drag disabled element shouldn t get pass here as it is inited this draggable 我搜索了很多 找不到实现这个逻辑
  • 如何在 的每四个循环项之后添加

    我想在循环中的每第四个数字项之后退出循环 我想创建一个二十人的名单 在每一个tr应该是4个人 So I want to break from the loop after every 4th number of loop My one tr
  • 使用 Jquery Ajax 将数据从 jsp 发送到 struts2 操作类

    我需要使用 jquery Ajax 将表单数据从 jsp 传递到 struts2 并从 Struts2 操作类接收回 JSON 数据 我已经给出了下面的代码 当我传递 AJAX 数据时 url search action searchTex
  • 未捕获的类型错误:未定义不是函数

    我收到消息Uncaught TypeError Undefined is not a function当我尝试调用家庭控制器中的方法时 也许关于我为什么收到此消息的建议 findIdpActivities function pernr ca
  • 画廊自动播放幻灯片?

    有没有人找到一种简单的方法来让很棒的画廊自动播放 我真的被这个困住了 任何帮助都会很棒 Thx Paul 自动播放 真 在选项中应该可以解决问题 autoplay type Boolean or Number default false 如
  • 插入四个空格而不是制表符

    我试图在按下 Tab 键时插入四个空格 我正在使用以下代码 请参阅spaces t 但是当我将其切换到spaces 当我按 Tab 时只插入一个空格 我还尝试了 function textarea keydown function e va
  • 来自 ajax 的 Bootstrap 表 json

    我有 ajax 和 bootstrap 表的问题 我有一个 ajax JSON 我用这个方法调用 document ready function ajax url php process php method fetchdata dataT

随机推荐