web-dev-qa-db-fra.com

jQuery: comment trouver les premiers boutons d'entrée / sélection / textarea visibles?

J'ai essayé

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

mais il ne trouve rien.

Quelle est mon erreur?

UPD: J'exécute ceci sur $ (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>

et dans le débogage je peux voir que firstInput est vide.

UPD2: Je suis dans la page ASP.NET s'exécutant sous Sharepoint.

Jusqu'à présent, j'ai trouvé que certains éléments les trouvaient (pour les éléments fixes) et d'autres pas. :(

81
Artem

Pourquoi ne pas simplement cibler ceux que vous voulez ( démo )?

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

Modifier

Ou utilisez jQuery : input selector pour filtrer les descendants des formulaires.

$('form').find('*').filter(':input:visible:first');
159
Mottie

Le code JQuery est correct. Vous devez exécuter dans le gestionnaire prêt pas dans l'événement de chargement de fenêtre.

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

Mettre à jour

J'ai essayé avec l'exemple de Karim79 (merci pour l'exemple) et cela fonctionne bien: http://jsfiddle.net/2sMfU/

12
PeterFromCologne

Ceci est mon résumé de ce qui précède et fonctionne parfaitement pour moi. Merci pour l'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>
6
Ben Foster

Ceci est une amélioration par rapport à la réponse de @ Mottie car à partir de jQuery 1.5.2 :text sélectionne input éléments sans attribut spécifié type (auquel cas type="text" est impliqué):

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

Voici ma solution. Le code devrait être assez facile à suivre mais voici l’idée:

  • obtenir toutes les entrées, sélections et textareas
  • filtrer tous les boutons et champs cachés
  • filtrer uniquement sur les champs visibles activés
  • sélectionnez le premier
  • concentrer le champ sélectionné

Le code:

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();
}

Ensuite, appelez simplement focusFirst avec votre élément parent ou votre sélecteur.

Sélecteur:

focusFirst('form#aspnetForm');

Élément:

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

Vous pouvez essayer ci-dessous le code ...

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