2012-03-30 12 views
7

Ich versuche zu überprüfen, ob ein contenteditable div Fokus hat, aber ich habe einige Probleme. Hier ist mein Code so weit:Siehe, ob ContentEditable div Fokus hat

if ($("#journal-content:focus")) { 
    alert("Has Focus"); 
} else { 
    alert("Doesn't Have Focus"); 
} 

Das Problem ist, ist es immer wiederkehrende „Hat konzentrieren“, auch wenn dies nicht der Fall. Was ist der beste Weg, dies zu tun?

Update: Der Grund, dies zu tun ist, um zu sehen, ob die Cursor an der gewünschten Stelle sind vor das neue Element eingefügt wird. Andernfalls, wenn die letzte Stelle, auf die der Benutzer geklickt hat, in der Kopfzeile war, wird die Auswahl mit Rangy wiederhergestellt und durch ein neues Element ersetzt. Ich brauche einen Weg, um herauszufinden, ob der contenteditable div fokussiert ist/den Cursor in sich hat, also wenn nicht, füge ich einfach das Element an, das ich am Ende einfüge.

Update 2: Hier ist ein JSFiddle illustriert mein Problem: http://jsfiddle.net/2NHrM/

+0

Check out mein Update unter Oder: – iambriansreed

+0

Haben Sie jemals eine Lösung finden? – iambriansreed

+0

Ich habe die Fiddle mit @ iambriansreed's Antwort aktualisiert, so dass es funktioniert. – Irwin

Antwort

9

Versuchen:

if ($("#journal-content").is(":focus")) { 
    alert("Has Focus"); 
} else { 
    alert("Doesn't Have Focus"); 
} 

Oder:

window.contenteditable_focused = false; 

$("#journal-content").focus(function() { 
    //alert("Has Focus"); 
    contenteditable_focused = true; 
}); 
$("#journal-content").blur(function() { 
    //alert("Doesn't Have Focus");   
    contenteditable_focused = false; 
}); 

prüfen contenteditable_focused bevor das Skript ausgeführt wird.

Oder:

if ($(document.activeElement).is("#journal-content")) { 
    alert("Has Focus"); 
} else { 
    alert("Doesn't Have Focus"); 
} 
+2

Hmm das macht das Gegenteil, gibt immer "hat keinen Fokus" ... – Adam

+0

Dann hat es keinen Fokus. – iambriansreed

+0

... aber es tut. Gleich danach verwende ich Rangy, um die Auswahl zu speichern, was gut funktioniert. – Adam

0

Sie können versuchen, diese

if ($("#journal-content").is(":focus")) { 
... 

Vielleicht, wenn Sie uns sagen werde, was Sie versuchen zu erreichen, werden wir eine weitere Hilfe sein. In der Zwischenzeit können Sie hier lesen: http://api.jquery.com/focus-selector/.

+0

Alrighty, aktualisiert meinen ursprünglichen Beitrag mit einer Erklärung von dem, was ich versuche zu tun. (Ich habe es versucht und es scheint nicht zu funktionieren). – Adam

+0

Wenn Sie dem Link folgen, den ich gepostet habe, sehen Sie Folgendes: _Wenn Sie nach dem aktuell fokussierten Element suchen, wird $ (document.activeElement) es abrufen, ohne dass der gesamte DOM-Baum durchsucht werden muss._ –

2

Was ist das ?:

if (document.activeElement.isContentEditable) { 
... 
} 

Ich weiß nicht, wie gut Browser-Unterstützung für diese, aber zumindest ist Chrome und Firefox unterstützen.

+1

Wäre nicht Arbeiten Sie überhaupt mit mehreren contentEditable Elementen. – diegoreymendez

3

Für reine JavaScript, wenn Sie mehrere contenteditable Elemente haben:

Die CSS und Markup dienen lediglich dem Snippet

Versuchen Sie das Snippet und drücken entweder Element ausgeführt wird.

function isFocused() { 
 
    if (document.activeElement.id == "journal-content") { 
 
    alert("Focused!"); 
 
    } else { 
 
    alert("Not focused :("); 
 
    } 
 
}
#journal-content { 
 
    background-color: #eee; 
 
} 
 
#not-journal-content { 
 
    background-color: #ccc; 
 
}
<div id="journal-content" contenteditable="true" onclick="isFocused()">Journal Content</div> 
 
<div id="not-journal-content" contenteditable="true" onclick="isFocused()">Not Journal Content</div>

Verwandte Themen