我试图在验证失败时将jquery验证器插件(低音缓冲器插件)的错误消息显示为组件上方的工具提示。工具提示(也是低音的)只是不会显示,所以我想知道如何使这些东西工作。到目前为止我的代码:
$("#loginForm").validate({
errorPlacement: function(error, element) {
$(element).tooltip({
content: 'the error message goes here'
});
}
});
另外,我想知道如何抓住要显示的实际本地化错误消息。我不想将其硬编码到工具提示中,就像我在上面的代码片段中所做的那样。
非常感谢任何帮助! ;)
答案 0 :(得分:17)
这样做的一种方法(没有工具提示插件)是一些关闭css代码和一些想象力:
$("#frmArticle").validate({
submitHandler: function(form) {
form.submit();
},
onfocusout: function(element) {
//To remove the 'checked' class on the error wrapper
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'); // add a class to the wrapper
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代码,我们将向用户隐藏此标签。但是errorImage总是可见的(当然,当创建元素时)。并且,当用户将鼠标悬停在它上面时,标签将显示:
div.Ntooltip {
position: relative !important; /* es la posición normal */
display: inline-block;
top: -0.2em;
left: 0.2em;
}
div.Ntooltip:hover {
z-index:1005; /* va a estar por encima de todo */
}
div.Ntooltip label {
display: none !important; /* el elemento va a estar oculto */
vertical-align: middle;
}
div.Ntooltip:hover label.error:not(.checked) {
display: inline-block !important; /* se fuerza a mostrar el bloque */
position: absolute; /* se fuerza a que se ubique en un lugar de la pantalla */
left:2em; /* donde va a estar */
width:auto; /* el ancho por defecto que va a tener */
padding:5px; /* la separación entre el contenido y los bordes */
background-color: #ff6611; /* el color de fondo por defecto */
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;
}
要使工具提示在其父级的边界外可见,您必须将父级的overflow属性更改为visible。如果您正在使用jQueryUI,请参阅css以进行这些更改。
overflow: visible;
这就是它的样子:
编辑:创建JSFiddle以进行演示,更新onfocusout
方法
答案 1 :(得分:2)
其他人可以找到这个解决方案:
我希望通过更强大的插件实现相同的目标,我找到了 qtip2 。 它与jQuery Validate很好地集成,你可以看到here
答案 2 :(得分:1)
我找到is this的唯一方法......
答案 3 :(得分:1)
我已经能够使用Bootstrap的工具提示机制来做到这一点。加载Bootstrap JS / CSS后,您可以初始化验证并传递showErrors函数,如下所示:
$("form").validate({
showErrors: function(errorMap, errorList) {
// Clean up any tooltips for valid elements
$.each(this.validElements(), function (index, element) {
var $element = $(element);
$element.data("title", "") // Clear the title - there is no error associated anymore
.removeClass("error")
.tooltip("destroy");
});
// Create new tooltips for invalid elements
$.each(errorList, function (index, error) {
var $element = $(error.element);
$element.tooltip("destroy") // Destroy any pre-existing tooltip so we can repopulate with new tooltip content
.data("title", error.message)
.addClass("error")
.tooltip(); // Create a new tooltip based on the error messsage we just set in the title
});
},
submitHandler: function(form) {
alert("This is a valid form!");
}
});
这就是它的工作原理。我也在其他情况下使用jQuery UI工具提示使用相同的机制完成此操作,并为此交换Bootstrap的东西。
您可以在我的博客上看到一个演示:http://blog.icanmakethiswork.io/2013/08/using-bootstrap-tooltips-to-display.html