Foros del Web » Programando para Internet » Jquery »

jquery: .prev()

Estas en el tema de jquery: .prev() en el foro de Jquery en Foros del Web. Tengo un script de validacion. Lo que hace es marcar en rojo el span.label que haya antes del elemento vacio. Me funciona en todos los ...
  #1 (permalink)  
Antiguo 19/10/2010, 18:38
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 9 meses
Puntos: 101
jquery: .prev()

Tengo un script de validacion. Lo que hace es marcar en rojo el span.label que haya antes del elemento vacio. Me funciona en todos los campos salvo en el de año.

Lo que creo que puede estar fallado es esto: .prev(".label")

Pongo un ejemplo que si funciona, y luego el input con el año:

Código Javascript:
Ver original
  1. <span class="label">Nombre</span>
  2.     <input type="text" name="nombre" value="" />

Código Javascript:
Ver original
  1. <span class="label">Fecha de nacimiento (d/m/a)</span>
  2.     <input type="text" name="nacimiento[]" value="" class="fecha" />
  3.     <select name="nacimiento[]">
  4.     <option value="1">Enero</option>
  5.             <option value="2">Febrero</option>
  6.             <option value="3">Marzo</option>
  7.             <option value="4">Abril</option>
  8.             <option value="5">Mayo</option>
  9.             <option value="6">Junio</option>
  10.             <option value="7">Julio</option>
  11.             <option value="8">Agosto</option>
  12.             <option value="9">Septiembre</option>
  13.             <option value="10">Octubre</option>
  14.             <option value="11">Noviembre</option>
  15.             <option value="12">Diciembre</option>
  16.     </select>
  17.     <input type="text" name="nacimiento[]" id="year" value="" class="fecha" />

Me marca en rojo si falta el dia, pero no si falta el año. Incluso he intentado adjudicarle un validador propio, pero no funciona:
Código Javascript:
Ver original
  1. if ( $("input#year").val().length < 4 ) // año.
  2.         {                  
  3.             respuestas[] = false;  
  4.             $(this).focus();
  5.             $(this).prev(".label").addClass("incompleto");
  6.         }
  #2 (permalink)  
Antiguo 19/10/2010, 19:30
Avatar de chicohot20  
Fecha de Ingreso: mayo-2009
Mensajes: 388
Antigüedad: 15 años, 6 meses
Puntos: 43
Respuesta: jquery: .prev()

Eso es porque no encuentra la clase .label
prueba con esto: $("input.fecha").prev(".label").addClass("incomple to");
  #3 (permalink)  
Antiguo 20/10/2010, 06:42
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 9 meses
Puntos: 101
Respuesta: jquery: .prev()

Lo acabo de probar (con un id, no con el atributo class porque está repetido muchas veces). No funciona. Es decir, la validación se ejecuta, pero el label no se marca. Y creo que es porque no esta inmediatamente antes que el input (tiene unos elementos entremedio.

Por otro lado, la validación a veces me da problemas. Pasa si pruebo sin escribir el año y luego si lo escribo. En ese caso, el formulario no se envia.

Lo que tengo por ahora es esto:

Código Javascript:
Ver original
  1. if ($("input#y").val().length != 4)
  2.             {                  
  3.                 respuestas.push(false);
  4.                 $(this).focus();
  5.                 $("input#y").prev(".label").addClass("incompleto");
  6.             }
  #4 (permalink)  
Antiguo 20/10/2010, 07:14
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 9 meses
Puntos: 101
Respuesta: jquery: .prev()

Solucionado. Efectivamente, prev solo funciona con elementos inmediatamente hermanos. Y no con elementos mas lejanos. Así que la solución fue usar prevAll mas :first:

Código Javascript:
Ver original
  1. $("input#y").prevAll('span.label:first').addClass("incompleto");

Si quieren algo de data:
http://www.mkyong.com/jquery/jquery-prev-example/
http://stackoverflow.com/questions/2...ing-with-class

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:00.