Ich habe einen Selektor, der mehrere Elemente auswählt. Ich möchte überprüfen, ob mindestens eines dieser Elemente den Fokus hat.

Beim Experimentieren habe ich festgestellt, dass .is(":focus") und .has(":focus") beim Umgang mit mehreren Elementen nicht funktionieren (siehe unten):

console.log( $('.text-block').is(":focus") ); // prints false
console.log( $('.text-block').has(":focus") ); // prints empty object array
console.log( $('.text-block').filter(":focus") ); // prints empty object array
console.log( $('.text-block:focus') ); // prints one element (works!)

Da der :focus Selektor der einzige Weg zu sein scheint, lautet meine Frage: Wie gehe ich vor, wenn sich meine Elemente ($('.text-block')) in einer Variablen befinden (wie $myElements)?

(Die zweite Frage wäre zu verstehen, warum nur der :focus Selektor für mich funktioniert.)

0
Matthew 3 Dez. 2013 im 05:45

3 Antworten

Beste Antwort

Durchlaufen Sie jedes Element und testen Sie, ob es :focus hat.

$('.text-block').each(function() {
    if ($(this).is(':focus')) {
        console.log('This element has focus!');
    }
});

Ich habe dies mit einigen grundlegenden HTML-Eingaben getestet und es funktioniert: http://jsbin.com/aTaqagOz/1/ (der JSBin, an dem ich gearbeitet habe, hat funktioniert, aber die Vorschau scheint nicht zu funktionieren)

Vielleicht fokussieren Ihre Elemente nicht richtig?

1
Jared 3 Dez. 2013 im 02:32

Versuchen Sie Folgendes:

$('text').each(function() {
    if ($(this).is(':focus')) {
        console.log('This element has focus!');
    }
});
0
Mr.G 3 Dez. 2013 im 04:58

Wie Sie hier lesen können http://api.jquery.com/focus-selector/ { {X0}} ist der richtige Weg. Wenn es false zurückgibt, bedeutet dies, dass es nicht den Fokus hat.

Sie können das fokussierte Element auch über $( document.activeElement ) abrufen.

Wie im jquery-Dokument angegeben, wird es ab Version 1.6 unterstützt. Ich weiß, dass es ein langer Weg ist, aber möglicherweise haben Sie eine ältere Version.

0
Onur Topal 3 Dez. 2013 im 01:52