JQuery - 显示错误和正确的图标进行验证

标签 jquery html css validation

我有一个表单和 JQuery 验证。一切正常。我不想显示消息,而是想显示图标。

错误的图标可以正常工作,但我在使用正确的图标时遇到了一些问题。当输入格式正确时,我会看到 class="valid"在语法中 <input class="valid"...> .我尝试在 <input..> 之后显示右图标通过使用 class="valid" .右边的图标显示在文本字段的右侧,文本字段消失。 LIVE CODE

请帮忙。

HTML

<form method="POST" id="TestForm">
    <input name="txtIn" type="text" id="txtIn">
    <p></p>
    <button id="submit">Submit</button>
</form>

CSS

label.error:after {
    content:"";
    display: inline-block;
    margin-left:10px;
    background: url("http://dummyimage.com/15x15/de1417/de1417.png") no-repeat;
    width: 15px;
    height: 15px;
}

.valid{
    margin-left:10px;
    background: green;
    width: 15px;
    height: 15px;
}

JS

$('#TestForm').validate({
    rules: {
        txtIn: {
            required: true,
            rangelength: [8, 16]
        }
    },
    messages: {
        txtIn: {
            required: "Please enter something",
            rangelength: "Icon"
        }




    }
});
$('.valid').after('<div class="valid"></div>');

最佳答案

不幸的是,Fiddle 中的验证并不总是能正确验证,但您可以尝试调整 $('.valid').after('<div class="valid"></div>');$('.valid').after('<div class="validicon"></div>');并重命名你的类(class) validvalidicon .否则,将设置为有效类的输入将应用宽度为 15px 等的 css,因此不可见。

更新:针对评论中提到的后续问题:可以尝试添加display:inline-block;类错误图标。作为第二种解决方法 - 如果您可以在输入内部而不是在输入旁边显示某种错误图标,一个简单的方法是:

input.valid {
   background-image: url('http://dummyimage.com/15x15/00ff11/fff.png&text=+');
   background-position: top right;
   background-size: 15px 15px;
   background-repeat: no-repeat;
}

更新 2: 我刚刚检查了验证插件的选项。通过扩展 validate() 的设置,可以为有效元素添加标签。像这样:

$("#TestForm'").validate({
   // keep your other settings/options for rules
   // and messages here and add:
  success: function(label) {  
   label.addClass("valid");
  }
});  

如评论中所述,只能使用像:after 这样的css 伪元素。或 :before对于容器元素,而不是像 input 这样的元素或 image . Robert Koritnik 在评论中对此提供了很好的解释:Can I use the :after pseudo-element on an input field? .如果可以使用上面建议的方法添加标签,您可以为 label.valid:after {... 添加 css与 label.error:after 相同的方式.

更新 3:对于 OP 评论中提到的下一个方法 - 添加带有 valid 类的标签似乎不起作用 - 我只是调整了 Fiddle .
HTML 调整 - 我移动了 <span class="add"></span><input>之后而不是将输入包装在跨度中。
jquery 调整:

if ($('#TestForm input').hasClass('valid')) {
  $('.add').addClass('validicon');
 } else {
  $('.add').removeClass('validicon');
}

如前所述,如果输入有效,Fiddle 会抛出 network error 403 CSRF verification failed。 ,但它应该适用于实际站点。

更新 4:使用 jquery 验证选项而不是尝试解决方法的新方法。调整后Fiddle在不发送表单的情况下在提交时显示有效图标。

HTML:

<form id="TestForm">
 <input type="text" id="txtIn" name="txtIn" />
 <p></p>
 <button id="submit">Submit</button>
</form>

CSS:

label {
 display: inline-block;
 margin-left:10px;
 width: 15px;
 height: 15px;
}
label.error {
 background-color: red;
}
label.valid {
 background-color: blue;
}

jquery:

$(document).ready(function () {

  var messages = {
    'txtInRequired': ""
  };

  $('#TestForm').validate({
    rules: {
        txtIn: {
            required: true,
            rangelength: [8, 16]
        }
    },
    messages: {
        txtIn: messages.txtInRequired
    },
    onfocusout: function (element) {
        this.element(element);
    },
    success: function (label, element) {
        if ($(element).hasClass("valid")) {
            label.addClass("valid");
        }
    },
    submitHandler: function (form) {
        alert('form is valid');
        return false;
    },
    focusInvalid: false,
    focusCleanup: true,
    onkeyup: false
  });
});

这些调整的引用:http://jqueryvalidation.org/category/plugin/

简短说明:
设置focusInvalid: false : 表单提交时input不会获得焦点,input无效,需要结合focusCleanup: true :当输入获得焦点时,验证被“清除”,因此不会显示错误或图标标签。 onkeyup: false : 在输入时输入未经验证。最后:success: function (label, element) { .. }如果元素有效,则将类 valid 添加到标签。

引用:http://jqueryvalidation.org/validate/

关于JQuery - 显示错误和正确的图标进行验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26325789/

相关文章:

php - 多维 PHP 数组转换为 HTML 表格

javascript - Web 浏览器正在按字母顺序编译 css 元素

javascript - screen.width 返回错误的大小 javascript android

javascript - 网页的缩放取决于设备尺寸

ipad - 在 ipad html5 站点中使用键盘自动对焦

javascript - 如何在JQuery方法Windows提示中调整窗口大小

jquery - 如何在右侧显示汉堡菜单?

html - xpath获取以特定字符或字符串开头的数据

javascript - 使用固定标题的表标题列不保持宽度

javascript - 通过动画显示 HTML Div?