395 votes

Comment obtenir l'élément focalisé avec jQuery ?

En utilisant jQuery, comment puis-je obtenir l'élément d'entrée qui a le focus du caret (curseur) ?

Ou en d'autres termes, comment déterminer si une entrée a le focus du caret ?

0 votes

0 votes

822voto

gdoron Points 61066
// Get the focused element:
var $focused = $(':focus');

// No jQuery:
var focused = document.activeElement;

// Does the element have focus:
var hasFocus = $('foo').is(':focus');

// No jQuery:
elem === elem.ownerDocument.activeElement;

Lequel devez-vous utiliser ? en citant le Documentation sur jQuery :

Comme pour les autres sélecteurs de pseudo-classe (ceux qui commencent par un " :"), il est recommandé de faire précéder :focus d'un nom de balise ou d'un autre sélecteur ; sinon, le sélecteur universel ("*") est implicite. En d'autres termes, la balise $(':focus') est équivalent à $('*:focus') . Si vous recherchez l'élément sur lequel vous vous trouvez, $( document.activeElement ) le récupérera sans avoir à parcourir l'ensemble du DOM.

La réponse est :

document.activeElement

Et si vous voulez un objet jQuery enveloppant l'élément :

$(document.activeElement)

2 votes

Mais attendez, comment puis-je obtenir l'élément qui a le caret ?

0 votes

@dave. Que voulez-vous dire ? "a le caret" la souris est dessus ?

1 votes

Voici ma situation : lorsque je clique sur un élément particulier, je veux placer un caractère dans le dernier élément de texte saisi. En fait, l'élément qui a eu le focus en dernier ou juste avant de cliquer sur cet élément particulier.

43voto

Grilse Points 719
$( document.activeElement )

le récupérera sans avoir à chercher dans toute l'arborescence du DOM, comme le recommande la directive Documentation sur jQuery

1 votes

Comment obtenir l'élément qui a le signe d'insertion ?

6voto

ucdream Points 116

J'ai testé les deux méthodes dans Firefox, Chrome, IE9 et Safari.

(1). $(document.activeElement) fonctionne comme prévu dans Firefox, Chrome et Safari.

(2). $(':focus') fonctionne comme prévu dans Firefox et Safari.

J'ai déplacé la souris pour saisir le 'nom' et j'ai appuyé sur la touche Enter du clavier, puis j'ai essayé d'obtenir l'élément ciblé.

(1). $(document.activeElement) renvoie l'input:text:name comme prévu dans Firefox, Chrome et Safari, mais il renvoie l'input:submit:addPassword dans IE9

(2). $(':focus') renvoie input:text:name comme prévu dans Firefox et Safari, mais rien dans IE

<form action="">
    <div id="block-1" class="border">
        <h4>block-1</h4>
        <input type="text" value="enter name here" name="name"/>            
        <input type="button" value="Add name" name="addName"/>
    </div>
    <div id="block-2" class="border">
        <h4>block-2</h4>
        <input type="text" value="enter password here" name="password"/>            
        <input type="submit" value="Add password" name="addPassword"/>
    </div>
</form>

5voto

Adil Malik Points 1754

Essayez ça :

$(":focus").each(function() {
    alert("Focused Elem_id = "+ this.id );
});

0 votes

Oui, c'est pourquoi cette boucle n'aura qu'une seule itération. L'alerte est juste pour démontrer l'exemple. Si vous avez cette variable, vous pouvez tout faire avec l'élément que vous voulez.

0 votes

Comment est-il possible de mettre au point plus d'un élément ?

0 votes

@AndreasFurster vous avez raison. Il n'y aura toujours qu'une seule itération dans cette boucle. Ce n'est peut-être pas la meilleure façon d'atteindre l'objectif, mais cela fonctionne.

3voto

Tom aka Sparky Points 70

Comment se fait-il que personne n'ait mentionné

document.activeElement.id

J'utilise IE8, et je ne l'ai pas testé sur un autre navigateur. Dans mon cas, je l'utilise pour m'assurer qu'un champ comporte un minimum de 4 caractères et qu'il est ciblé avant d'agir. Dès que vous entrez le quatrième chiffre, il se déclenche. Le champ a pour identifiant "year". J'utilise

if( $('#year').val().length >= 4 && document.activeElement.id == "year" ) {
    // action here
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X