2011-03-25 22 views
7

Parece que se ha hecho esta pregunta antes, pero parece que ninguna pregunta soluciona mi problema, así que le pido disculpas de antemano.jQuery validate errorPlacement on single element

porque estoy usando ASP.NET y no se puede predecir el nombre de los controles que desea validar, yo soy la creación de mis reglas jQuery validar este modo:

jQuery('textarea[id$=MessageTextInput]').rules("add", { required: true, messages: { required: "required"} }); 
jQuery('input[id$=LinkTextInput]').rules("add", { required: true, messages: { required: "required"} }); 
jQuery('input[name$=PositionChoiceInput]').rules("add", { required: true, messages: { required: "required"} }); 

En lugar de:

$ ('# aspnetForm'). Validate ({opciones y reglas}); // que requiere los nombres de control

El problema es que la tercera regla es una lista de botones de radio y el mensaje de error no se coloca en el lugar correcto. Se coloca directamente después del primer botón de radio, mientras que lo quiero después de la última lista de botones de opción.

jQuery('textarea[id$=MessageTextInput]').rules("add", { required: true, messages: { required: "required"} }); 
jQuery('input[id$=LinkTextInput]').rules("add", { required: true, messages: { required: "required"} }); 
jQuery('input[name$=PositionChoiceInput]').rules("add", { required: true, messages: { required: "required"} }); 

Sin embargo, parece que el método no funciona cuando agrego la opción errorPlacement. También he intentado lo siguiente:

jQuery('#aspnetForm').validate({ errorPlacement: function (error, element) { 
      if (element.hasClass('sfRadioList')) { 
       error.insertAfter(element.parent("ul")); 
      } 
     } 
     }); 
jQuery('textarea[id$=MessageTextInput]').rules("add", { required: true, messages: { required: "required"} }); 
jQuery('input[id$=LinkTextInput]').rules("add", { required: true, messages: { required: "required"} }); 
jQuery('input[name$=PositionChoiceInput]').rules("add", { required: true, messages: { required: "required"} }); 

Pero eso todavía no ha funcionado. ¿Qué puedo hacer para establecer la ubicación de solo un elemento?

Gracias de antemano higgsy

Respuesta

16

Aquí hay un código que trabajó para mí ...

errorPlacement: function(error, element) { 
if (element.attr("name") == "pdfEmailAddress") 
    { 
     error.insertAfter("ul.slinks"); 
    } 
    else 
    { 
     error.insertAfter(element); 
    } 
} 
+0

y para mí! Gracias por tu respuesta. – higgsy