2010-05-12 1 views
77

Ich versuchtejQuery: Wie findet man den ersten sichtbaren Eingang/select/textarea ohne Schaltflächen?

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

aber es hat nichts zu finden.

Was ist mein Fehler?

UPD: Ich führe diese auf $ (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> 

und im Debug kann ich sehen, dass ersten Eingang leer.

UPD2: Ich bin in ASP.NET-Seite unter Sharepoint ausgeführt.

Ich habe bis jetzt gefunden, dass für einige Elemente sie (für feste) findet und für einige nicht. :(

+0

Try „Eingang“ statt „: Eingabe“? – Alec

+0

Sollte gut funktionieren. Dein Problem liegt woanders. Machst du das nicht * bevor * das '$ (document)' ist 'ready()'? – BalusC

+0

Haben Sie einen bestimmten HTML-Code, nach dem gesucht werden soll? – Shiki

Antwort

149

Warum zielen nicht nur die, die Sie (demo wollen)

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

bearbeiten

Oder jQuery :input Selektor verwenden, um Form Nachkommen zu filtern.

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

Checkbox? Radio? Passwort? Ganz zu schweigen von den vielen neuen HTML5-Eingabetypen. – BalusC

+9

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

+0

Während dies bis zu einem gewissen Grad funktioniert, wird das tabindex-Attribut ignoriert. – eoleary

11

Der JQuery-Code ist in Ordnung. Sie müssen in dem Bereitschafts Handler ausführen nicht im Fenster Ladeereignis.

<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> 

aktualisiert

ich mit dem Beispiel von Karim79 versucht (Danke für das Beispiel) und es funktioniert gut: http://jsfiddle.net/2sMfU/

+1

+1 obwohl ich ihm das vor 1 Stunde gesagt habe. – BalusC

+2

Danke @BalusC. Ich werde jetzt selbst schießen. Ich hasse mich. Ich hätte die letzte Stunde damit verbringen können, den Arbeitscode nicht zu stören. Ich hätte meine Hunde füttern und meine Küche reinigen können. Es gibt viele Dinge, die ich hätte erreichen können. Jetzt habe ich nur Schmerzen. Auf Wiedersehen, für immer .... Und ja, ich hätte * hören sollen. – karim79

+0

@ karim: rofl. Gern geschehen :) Übrigens: Ich badete meine Kinder schon, brachte sie ins Bett, fütterte die Hunde und Katzen und nahm mir eine Coca Cola;) – BalusC

6

Dies ist meine Zusammenfassung der oben genannten und funktioniert perfekt für mich. Danke für die Information!

<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

Hier ist meine Lösung. Der Code sollte leicht genug sein, zu folgen, aber hier ist die Idee:

  • erhalten alle Eingänge, wählt und Textbereiche
  • ausfiltern alle Tasten und versteckte Felder
  • Filter nur dann aktiviert, sichtbare Felder
  • wählt das ausgewählte Feld, um den ersten
  • Fokus

Der Code:

Rufen Sie dann einfach focusFirst mit Ihrem übergeordneten Element oder Selektor auf.

Selector:

focusFirst('form#aspnetForm'); 

Element:

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

Sie unter Code versuchen können ...

$(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

Dies ist ein n Verbesserung gegenüber @ Mottie Antwort, weil, wie von jQuery 1.5.2 :text wählt input Elemente, die kein bestimmtes type Attribut (in diesem Fall type="text" wird angedeutet):

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