2012-02-18 14 views
10

Ho una variabile che detengono diverse form-oggetti come questo ... $(formId)jQuery: seleziona l'input del primo figlio all'interno del modulo ma non quando digita: nascosto?

Ogni forma è differente come sia ha un campo di input nascosto come primo elemento o il primo figlio è un ingresso normale (type = "text" o qualcos'altro)

come può selezionare ho sempre il primo campo "normale" input

$(formId).find("input:first-child:not[type='hidden']") 

ho pensato che dovrebbe essere qualcosa di simile. Quindi, se ti chiedi per cosa ho bisogno di questo - voglio mettere a fuoco il primo campo di input nel modulo, ma se il primo input è nascosto, ovviamente voglio impostarlo sul prossimo input "visibile".

risposta

18

Il selettore :first-child seleziona un elemento che è il primo figlio, non il primo elemento di un collezione jQuery.
Per selezionare il primo elemento di una raccolta, utilizzare il selettore :first di jQuery.

Anche l'implementazione di :not è errata.
:not[type='hidden']è uguale a:not()[type='hidden']è pari a[type='hidden'] - Il contrario di ciò che si vuole.


queste sono le giuste (sono equivalenti):

input:not([type=hidden]):first 
input[type!=hidden]:first 
8

$(formId).find ('input:visible:first').focus();

+3

': [! Type = "hidden"] visible' non è uguale a' '. Se aggiungi 'style =" display: none "' a un elemento di input, non ** **: visible', ma ** fa ** corrisponde a '[type! =" Hidden "]'. –

0

Sarebbe utilizzando il: lavoro di selezione nascosto nel vostro caso?

$(formId).find("input:first-child:not(:hidden)") 

(Non è così sicuro di ottenere ciò che il vostro markup sembra ...)

+3

Il selettore ': first-child' seleziona un elemento che è il primo figlio. Per selezionare il primo elemento di una raccolta, usa il selettore ': first' di jQuery:' input: not ([type = hidden]): first'. –

+0

@Rob W: sembra funzionare perfettamente e sembra la soluzione giusta. Se lo pubblichi come risposta, lo accetto. – matt

Problemi correlati