2010-05-12 14 views
77

me trataronjQuery: ¿cómo encontrar los primeros botones de entrada/selección/textarea visibles excluyendo?

$(":input:not(input[type=button],input[type=submit],button):visible:first") 

pero no encuentra nada.

¿Cuál es mi error?

UPD: ejecuto esto en $ (document) .load()

<script type="text/javascript"> 
$(window).load(function() { 
    var aspForm = $("form#aspnetForm"); 
    var firstInput = $(":input:not(input[type=button],input[type=submit],button):visible:first", aspForm); 
    firstInput.focus(); 
}); 
</script> 

y en la depuración puedo ver que firstInput está vacía.

UPD2: Estoy en la página ASP.NET que se ejecuta en Sharepoint.

He encontrado hasta ahora que para algunos elementos los encuentra (para los fijos) y para algunos no. :(

+0

probar "entrada" en lugar de ": de entrada"? – Alec

+0

Debería funcionar bien. Tu problema está en otro lado. ¿No estás ejecutando esto * antes de * el '$ (documento)' es 'listo()'? – BalusC

+0

¿Tiene un html específico para buscar? – Shiki

Respuesta

149

¿Por qué no apuntar a las que desee (demo)

?
$('form').find('input[type=text],textarea,select').filter(':visible:first'); 

Editar

O utilice el selector de jQuery :input para filtrar de forma descendientes.

$('form').find('*').filter(':input:visible:first'); 
+5

¿Casilla de verificación? ¿Radio? ¿Contraseña? Sin mencionar la cantidad de nuevos tipos de entrada HTML5. – BalusC

+9

@BalusC $ ('form'). Find (': input'). Filter (': visible: first') –

+0

Si bien esto funciona hasta cierto punto, ignora el atributo tabindex. – eoleary

11

El código jQuery está muy bien. Debe ejecutar en el controlador dispuesto no en el evento de carga de la ventana.

<script type="text/javascript"> 
$(function(){ 
    var aspForm = $("form#aspnetForm"); 
    var firstInput = $(":input:not(input[type=button],input[type=submit],button):visible:first", aspForm); 
    firstInput.focus(); 
}); 
</script> 

actualización

que probé con el ejemplo de Karim79 (gracias por el ejemplo) y funciona bien: http://jsfiddle.net/2sMfU/

+1

+1 a pesar de que se lo dije hace 1 hora. – BalusC

+2

Gracias @BalusC. Voy a dispararme ahora mismo. Me odio a mí mismo. Pude haber pasado la última hora sin meterme con el código de trabajo. Podría haber alimentado a mis perros, haber limpiado mi cocina. Hay muchas cosas que podría haber logrado. Ahora todo lo que tengo es dolor. Adiós, para siempre ... Y sí, yo * debería * haber escuchado. – karim79

+0

@karim: rofl. De nada :) Por cierto: ya bañé a mis hijos, los llevé a la cama, alimenté a los perros y gatos y me tomé una coca cola;) – BalusC

6

Este es mi resumen de lo anterior y funciona perfectamente para mí. Gracias por la info!

<script language='javascript' type='text/javascript'> 
    $(document).ready(function() { 
     var firstInput = $('form').find('input[type=text],input[type=password],input[type=radio],input[type=checkbox],textarea,select').filter(':visible:first'); 
     if (firstInput != null) { 
      firstInput.focus(); 
     } 
    }); 
</script> 
0

Aquí está mi solución. El código debe ser bastante fácil de seguir, pero aquí es la idea:

  • obtener todas las entradas, selecciona y áreas de texto
  • filtrar todos los botones y campos ocultos
  • filtro sólo está habilitado, los campos visibles
  • seleccione la primera
  • enfoque del campo seleccionado

el código:

function focusFirst(parent) { 
    $(parent).find('input, textarea, select') 
     .not('input[type=hidden],input[type=button],input[type=submit],input[type=reset],input[type=image],button') 
     .filter(':enabled:visible:first') 
     .focus(); 
} 

Luego simplemente llame a focusFirst con su elemento principal o selector.

Selector:

focusFirst('form#aspnetForm'); 

Elemento:

var el = $('form#aspnetForm'); 
focusFirst(el); 
0

Usted puede tratar a continuación el código ...

$(document).ready(function(){ 
 
    $('form').find('input[type=text],textarea,select').filter(':visible:first').focus(); 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
 
<form> 
 
<input type="text" /> 
 
<input type="text" /> 
 
<input type="text" /> 
 
<input type="text" /> 
 
<input type="text" /> 
 
    
 
<input type="submit" /> 
 
</form>

2

Ésta es una n mejora con respecto a la respuesta de @ Mottie porque a partir de jQuery 1.5.2 :text selecciona input elementos que no tienen type atributo especificado (en cuyo caso se implica type="text"):

$('form').find(':text,textarea,select').filter(':visible:first') 
Cuestiones relacionadas