2009-08-05 16 views
7

Actualmente tengo un script que verificará el valor de un cuadro de selección, y luego habilite un campo de texto junto a él, y luego establezca el foco.Establecer el foco en la siguiente entrada en jQuery?

tengo esto en el momento en el que funciona bien a permitir que el campo de entrada ...

$("#assessed select").change(function() { 

    if($(this).val() == 'null') { $(this).next('input').attr("disabled", true); } 
    else { $(this).next('input').removeAttr("disabled"); } 

}); 

estoy un poco atascado en el bit de 'enfoque' para ser honesto, he intentado "$ (esto) .next ('input'). focus(); " pero eso no se enfocó en absoluto, aunque tampoco apareció un error de Javascript ...

$("#assessed select").change(function() { 

    if($(this).val() == 'null') { $(this).next('input').attr("disabled", true); $(this).next('input').focus(); } 
    else { $(this).next('input').removeAttr("disabled"); } 

}); 

¿Alguna idea, por favor, chicos? ¡Estoy realmente atrapado en esto y sería una adición muy simple, pero muy útil a la página que estoy construyendo!

Gracias

+0

Podría publicar su código HTML así? – RaYell

Respuesta

5

Modificado de la respuesta anterior con caché este objeto JQ. Además, el filtro que se encuentra a continuación no es necesario. next() solo devolverá el siguiente hermano. El filtro básicamente dice que consígame el próximo solo si es una entrada o cualquier filtro que proporcione. Si está seguro de que el siguiente es el objeto deseado, no es necesario incluir el filtro.

$("#assessed select").change(function() { 
    var $this = $(this); 
    if($this.val() === 'null') { 
     $this.next() 
      .attr("disabled", true); 
    } 
    else { 
     $this.next() 
      .removeAttr("disabled") 
      .focus(); 
    } 
}); 
+0

Absolutamente perfecto, y mucho ¡Mejor solución que la que estaba usando, gracias! – Nick

1

creo que su problema podría ser que no es posible establecer el foco a un control de entrada de personas con discapacidad (por lo menos en algunos navegadores/sistemas operativos).

Su llamada a focus() está básicamente en el bloque equivocado, debe estar en el bloque else, no en el bloque if.

De esta manera:

$("#assessed select").change(function() { 

    if($(this).val() == 'null') { $(this).next('input').attr("disabled", true); } 
    else { $(this).next('input').removeAttr("disabled"); $(this).next('input').focus(); } 
}); 
+0

¡Hah! Muchas gracias, Rob ... ¡Me acabo de dar cuenta de que pongo el foco en el 'si' y no en el 'otro'! Error absoluto del colegial, lo siento y muchas gracias - no fue hasta que publicó que me di cuenta :) – Nick

+0

Recuerde guardar el $ (esto) en lugar de llamarlo varias veces – redsquare

+0

Hecho, gracias :) – Nick

14

encuentra también un plugin poco agradable para conseguir la siguiente entrada: http://jqueryminute.com/set-focus-to-the-next-input-field-with-jquery/

$.fn.focusNextInputField = function() { 
    return this.each(function() { 
     var fields = $(this).parents('form:eq(0),body').find('button,input,textarea,select').not(':hidden'); 
     var index = fields.index(this); 
     if (index > -1 && (index + 1) < fields.length) { 
      fields.eq(index + 1).focus(); 
     } 
     else {fields.first().focus();} 
     return false; 
    }); 
}; 
+4

Agregaría '.not (': hidden')' a la declaración de campos, por lo que solo se seleccionarán los elementos visibles. Además, agregue 'else {fields.first(). Focus();}' para enfocar el primer elemento. –

+0

¿Por qué busca la forma de los padres: eq (0) primero? – Serge

+0

@Serge selecciona el formulario principal en el que está el elemento de entrada. No sé si la "eq (0)" es necesaria, no es mi código, por lo que no estoy seguro. – TimoSolo

Cuestiones relacionadas