在没有提示插件的情况下,一种实现方法是使用一些 CSS 代码和想象力:
$("#frmArticle").validate({
submitHandler: function(form) {
form.submit();
},
onfocusout: function(element) {
var $errorContainer = $(element).siblings(".Ntooltip").find("label");
$errorContainer.removeClass("checked");
if ( !this.checkable(element)) {
this.element(element);
}
},
rules: {
name: {
required: true
}
},
errorPlacement: function(error, element) {
var container = $('<div />');
container.addClass('Ntooltip');
error.insertAfter(element);
error.wrap(container);
$("<div class='errorImage'></div>").insertAfter(error);
},
success: function(element) {
$(element).addClass("checked");
}
});
我不仅创建了一个错误标签,还为错误设计了以下HTML代码:
<div class="Ntooltip">
<label for="nombre" generated="true" class="error">Requerido</label>
<div class="errorImage"></div>
</div>
使用 CSS 代码,我们将隐藏此标签对用户不可见。但错误图像始终可见(当元素创建时,当然)。当用户悬停在上面时,标签将显示:
div.Ntooltip {
position: relative !important;
display: inline-block;
top: -0.2em;
left: 0.2em;
}
div.Ntooltip:hover {
z-index:1005;
}
div.Ntooltip label {
display: none !important;
vertical-align: middle;
}
div.Ntooltip:hover label.error:not(.checked) {
display: inline-block !important;
position: absolute;
left:2em;
width:auto;
padding:5px;
background-color: #ff6611;
border: 3px coral solid;
border-radius: 0.5em;
color: white;
opacity: 0.85;
}
label.error + div.errorImage {
background:url("../img/error.png") no-repeat 0px 0px;
display:inline-block !important;
width:22px;
height:22px;
vertical-align: middle;
}
label.checked + div.errorImage {
background:url("../img/valid.png") no-repeat 0px 0px;
display:inline-block !important;
width:22px;
height:22px;
vertical-align: middle;
}
如果要使工具提示在其父元素范围之外可见,您必须更改父元素的溢出属性为 visible。如果您正在使用 jQueryUI,请查看用于进行这些更改的 CSS。
overflow: visible;
以下是它的样子:
![validation](https://istack.dev59.com/lm686.webp)
编辑: 创建了一个JSFiddle进行演示,更新了onfocusout
方法。
https://jsfiddle.net/2vc5vmr0/