2014-04-23 12 views
5

Dieser einfache Wähler das erste leere Texteingabefeld in meiner Form findet aber überspringt Passwort Typ Eingänge:Suche erstes leeres Eingabefeldes

$('input:text[value=""]:first').focus(); 

Gibt es eine nette Art und Weise zu sagen: Text oder Passwort in den obigen Erklärung?

+1

Versuch '$ ('input [type = password] [value = ""]: first')' – MilkyWayJoe

+0

Möchten Sie das gesamte Formular testen und dann auf den ersten leeren Eingang konzentrieren? –

+1

Absolut Jay, danke – cneeds

Antwort

7
$('input:text[value=""]').add('input:password[value=""]').first().focus(); 

Ich glaube nicht, dass es einen besseren Weg gibt. Das ist, was ich dachte, bevor Sie einen Blick auf @Hari Das Antwort nehmen, die ein Problem hat, sondern bringt alternative Lösung meiner Meinung nach:

$('input:text[value=""],input:password[value=""]').first().focus() 

Wählen Sie das eine, die besser lesbar zu Ihnen ist.

+0

Ihre Begrüßung. Bitte upvote auch :) – ElmoVanKielmo

+0

Ah ja, ich habe versucht, zu Ihrer zweiten Version zu gelangen, aber die Eingabe nach dem Komma weggelassen. Warum hat das ein Problem? Wissen Sie? – cneeds

+0

Überraschend ein bisschen. Sollte auch funktionieren, aber es wird empfohlen, 'input: password' anstelle von': password' für bessere Leistung zu verwenden. – ElmoVanKielmo

4

hier ein wenig benutzerdefinierten Ausdruck:

$.expr[':'].is = function(a,b,c){ 
    return $(a).is(c[3]) 
} 

, mit denen Sie is in einem Selektor verwenden. Sie können erreichen, was Sie mit, dass wollen:

$('input[value=""]:is([type=text],[type=password]):first') 

Fiddle

+0

Danke Karl, aber ich verstehe nicht, wie der benutzerdefinierte Ausdruck funktioniert :-( – cneeds

+0

Die Syntax innerhalb der ': is()' ist genau das gleiche wie die jquery-Methode ['.is()'] (http: // api.jquery.com/is/) und gibt eine Menge von Elementen zurück –

+0

Wie die Umkehrung von: not()? – cneeds

1

durch Komma können Sie mehrere Wähler ein. Es funktioniert wie ein OR-Operator.

$('input:text[value=""]:first,input:password[value=""]:first') 
+0

Das Problem dabei ist, dass du 2 Elemente haben wirst ": first" muss außerhalb des Selektors liegen. –

1

The sichtbar ist es versteckte Felder zu überspringen, wie select2 automatisch generierten Eingaben.

$('input:text[value=""]:visible:first',input:password[value=""]:first) 
+0

Passwort-Typ fileds könnte auch unsichtbar sein, denke ich. Also '$ ('input: text [value =" "]: visible: zuerst, input: password [value =" "]: sichtbar: zuerst ') ' – cneeds