2014-01-09 9 views
6

Ich versuche, den Fokus von einer (jQuery Mobile) Texteingabe zu entfernen, wenn ein Benutzer Tabs auf dem Desktop wechselt. Während ich das activeElement in der unteren Konsole korrekt identifizieren kann, kann ich keine seiner Eigenschaften bearbeiten oder den Fokus entfernen.Wie entferne ich den Fokus von activeElement, wenn ich Tabs ändere (onfocus/onblur)?

Das ist, was ich tue:

// inside some init method   

window.onfocus = function() { 
    // triggers 
    console.log(document.activeElement); 
    if (document.activeElement.tagName !== "BODY") { 
    console.log("clear focus"); 
    document.activeElement.blur(); 
    document.activeElement.className = "FOOBAR"; 
    } 
}; 

Wenn ich auf einer Form bin und eine Texteingabe konzentrieren, dann auf einem anderen Tab wechseln und mit dem Formular auf die Registerkarte zurück, der Ereignis-Listener Trigger und meine noch aktive Eingabe wird korrekt protokolliert. Aber das ist es ... Ich kann keine der Elementeigenschaften verwischen oder bearbeiten.

Frage:
Wie richtig entferne ich den Fokus von dem aktiven Element entweder auf window.onfocus oder window.onblur?

Danke!

PS: es ist auch nicht mit jQuery arbeiten:

$(window).on("focus", function() { 
    $(document.activeElement).blur(); 
}); 

und ich bin für eine einzige Lösung JavaScript.

EDIT:
document.activeElement.blur() Werke aus der Konsole in Ordnung, aber nicht von meinen Zuhörern.

+0

Haben Sie versucht, den Fokus auf ein anderes Element zu ändern, z. das Dokument? –

+0

yup. Ich habe es gerade gelöst. Warte, ich poste. – frequent

Antwort

6

Ok. Dies funktioniert:

window.onblur = function() { 
     document.activeElement.blur(); 
    }; 

So schien es die Unschärfe gut funktioniert, denn wenn ich activeElemnt tröste vor und nach meinem Aufruf an blur() es von einem Eingang zu dem BODY-Tag geschaltet. Richtig, mein Körper hat seine Klasse auf FOOBAR eingestellt. Problem für mich war, dass das Textelement immer noch den Fokus behielt, aber ich nehme an, dies liegt an einem Handler in jQuery Mobile.

Die obige Lösung funktioniert andersherum. Ich entferne Fokus von activeElement, wenn der Benutzer eine Registerkarte wechselt. Funktioniert.

+0

Arbeiten für mich! Gute Problemumgehung! – bichotll