trabajo en cadena
Me gustaría colocar una etiqueta de error (No todo) en una ubicación personalizada. jQuery proporciona esto http://docs.jquery.com/Plugins/Validation/validate#toptions pero no pude encontrar nada sobre cómo colocar un mensaje de error específico y no cambiar la ubicación predeterminada de todo el resto.
Asegúrese de revisar todas las respuestas a continuación. Hay múltiples soluciones a esto. ¡Gracias a todos!
trabajo en cadena
Entonces, si desea que todos sus mensajes de error de jQuery Validate aparezcan en un solo lugar, usaría
http://docs.jquery.com/Plugins/Validation/validate#toptions (Buscar ubicación de error) en esa página.
Noté algunas respuestas aquí, responda una pero no ambas opciones.
1) Dicho esto, si desea una ubicación personalizada para todos sus errores, puede hacer esto:
$("#myform").validate({
errorPlacement: function(error, element) {
error.appendTo('#errordiv');
}
});
2) Si desea especificar ubicaciones específicas para una o varias etiquetas de error, puede hacerlo.
errorPlacement: function(error, element) {
if (element.attr("name") == "email" )
error.insertAfter(".some-class");
else if (element.attr("name") == "phone" )
error.insertAfter(".some-other-class");
else
error.insertAfter(element);
}
-
¿Por qué elegiste
error.appendTo( element.parent("td").next("td") )
como la ubicación, cuando es realmente arbitraria? Me doy cuenta de que está respondiendo a su propia pregunta, pero sin el código original para proporcionar el contexto real, su respuesta puede confundir a los futuros lectores. Proporcioné una respuesta más genérica que coincide con el carácter genérico de la pregunta original. Además, normalmente uno espera un tiempo antes de responder a su propia pregunta para dar a los demás una amplia oportunidad de responder. No hiciste nada malo aquí, pero una variedad de respuestas hace que sea de mayor calidad en SO.– chispeante
2 de noviembre de 2012 a las 18:21
-
Sparky estuvo de acuerdo, estaba emocionado de encontrar la respuesta. Lo tomé de docs.jquery.com sin notar que su ejemplo es confuso. Volveré y lo actualizaré para que quede más claro. ¡Gracias!
– trabajo en cadena
2 de noviembre de 2012 a las 18:23
-
Incluya una demostración usando el Validar el enlace CDN del complemento dentro de una jsviolín y observe cómo su pregunta genera votos a favor durante mucho tiempo.
– chispeante
2 de noviembre de 2012 a las 18:31
-
Hola, pude colocar todos los errores en un solo lugar, pero viene en una sola línea. ¿Cómo dividir los errores en nuevas líneas? por favor ayuda
– hima
13 de septiembre de 2013 a las 8:30
-
Hola Hima, ¿puedes compartir tu código? Porque tengo el mismo problema.
– Narén Verma
22 de diciembre de 2016 a las 12:29
Abdurrahman I.
En realidad, no es necesario usar ningún código javascript y descubrí una solución simple para esto. Puede obligar a jQuery Validate a colocar el error de validación en un elemento DOM.
Por ejemplo, jQuery genera un error como este:
<label for="firstname" generated="true" class="error">This field required.</label>
Puede colocar este elemento DOM de etiqueta en su próximo td
bloquear o li
elemento o lo que quieras como un espacio en blanco como este.
<label for="firstname" generated="true" class="error"></label>
jQuery encontrará ese campo en blanco y colocará el mensaje de error por usted.
Solo no olvides el por campo en elemento de etiqueta!
-
¡Gran solución! No hay necesidad de meterse con jQuery por algo tan simple.
– KyleMit
♦08/09/2015 a las 13:50
-
¿Sabes si el
generated
atributo era necesario? Parecía funcionar bien para mí sin el atributo usando jQuery Validate 1.11.1.– sam
21 de febrero de 2017 a las 0:53
-
Hola, @Sam, en realidad no comprobé si ese atributo era necesario o no. Y yo tampoco lo creo. Podrías tener razón.
– Abdurrahmán I.
7 abr 2017 a las 7:30
-
Tenga en cuenta que esto solo parece funcionar si el
for
atributo se establece en la entradaname
en lugar de suid
.– sam
20 de abril de 2018 a las 3:39
-
Un enfoque mucho más simple para mí que la respuesta actualmente aceptada, ¡gracias!
– FoxDeploy
3 de diciembre de 2018 a las 18:21
chispeante
Esta es una solución más genérica, no específica de la estructura HTML del OP.
Si solo desea una etiqueta de error en particular en una ubicación diferente mientras el resto permanece en su ubicación predeterminada, intente esto…
$("#myform").validate({
errorPlacement: function(error, element) {
if (element.attr("name") == "myFieldName") {
// do whatever you need to place label where you want
// an example
error.insertBefore( $("#someOtherPlace") );
// just another example
$("#yetAnotherPlace").html( error );
} else {
// the default error placement for the rest
error.insertAfter(element);
}
}
});
-
Sr. Sparky. Si es posible, ¿puede compartir el código completo para que pueda entenderlo?
– Narén Verma
22 de diciembre de 2016 a las 12:34
Descubrí que si tiene más de dos etiquetas para errores personalizados en diferentes ubicaciones, puede haber un error de posición loco si no hace un solo retorno en cada uno si para errorPlacement, en esta muestra tengo dos casillas de verificación, etiqueta de error, uno casilla de verificación, una etiqueta
código HTML
<p><label for="owner"><input type="checkbox" name="option[]" id="owner" value="1" validate="required:true, minlength:2" /> I am Owner of my Company</label></p>
<p><label for="agency"><input type="checkbox" name="option[]" id="agency" value="1" /> I am an Agency</label>
<div id="errordiv"></div></p>
<hr>
<p><label for="agree"><input type="checkbox" name="agree" id="agree" value="1" required /> I Agree and I read the Privacy Polities and Use of Terms</label>
<div id="error_agree"></div>
Guion
<script>
$("#register_form").validate({
errorPlacement: function(error, element) {
if(element.attr("name") == "option[]"){
error.appendTo('#errordiv');
return;
}
if(element.attr("name") == "agree"){
error.appendTo('#error_agree');
return;
}else {
error.insertAfter(element);
}
}
});
</script>
+1 en Q y A por su útil intercambio.
– chispeante
2 de noviembre de 2012 a las 18:23