2012-03-30 17 views
7

Kapsamlı bir div öğesinin odaklanıp odaklanmadığını kontrol etmeye çalışıyorum ama sorun yaşıyorum. İşte şimdiye kadar benim kod:ContentEditable div odağı içeriyorsa,

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

sorundur, her zaman dönüyor o olmasa bile tüm "odak Var". Bunu yapmanın en iyi yolu nedir?

Güncelleme: Bunu yapmanın nedeni imleç yeni eleman takmadan önce istediğiniz konuma içinde olup olmadığını görmektir. Aksi takdirde, kullanıcının tıkladığı son yer üstbilgideydi, sonra seçimi Rangy ile geri yüklediğimde ve onu yeni bir elemanla değiştirdiğimde, başlıkta yer alır. Içerikli div odaklanmış/içinde imleci varsa öğrenmek için bir yola ihtiyacım var, bu yüzden, ben sadece sonuna ekliyorum eleman ekleyeceğim.

Güncelleme 2: İşte JSFiddle gösteren benim sorunum: http://jsfiddle.net/2NHrM/

+0

Kontrol Veya altında benim güncelleme: – iambriansreed

+0

Hiç bir çözüm bulmak mı? – iambriansreed

+0

Çalıştığım için @ iambriansreed'in yanıtını kullanarak Fiddle'ı güncelledim. – Irwin

cevap

9

Dene:

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

Veya: Senaryonu yürütmeden önce contenteditable_focused için

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

kontrol edin.

Veya: Eğer biz daha fazla yardımcı olacak başarmak için çalışıyoruz bize ne söyleyeceğim eğer

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

Hmm, bunun tersini yapar, her zaman "odaklanma" değerini döndürür ... – Adam

+0

Ardından odaklanma yok. – iambriansreed

+0

... ama öyle. Hemen sonra seçim yapmak için Rangy'yi kullanıyorum, bu da gayet iyi çalışıyor. – Adam

0

Sen Belki bu

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

deneyebilirsiniz. Bu arada, buradan okuyabilirsiniz: http://api.jquery.com/focus-selector/. Bunun neresi

+0

Tamam, özgün yazımı ne yapmaya çalıştığımı açıklayan bir açıklama ile güncelledi. (Seninkini denedim ve işe yaramıyor). – Adam

+0

Gönderdiğim bağlantıyı takip ederseniz şu mesajı görürsünüz: _Tam şu anda odaklanmış öğeyi arıyorsanız, $ (document.activeElement), tüm DOM ağaçlarını aramak zorunda kalmadan geri getirecektir. –

2

bu ama en azından Chrome ve Firefox desteklemesi olduğunu için ben ne kadar iyi tarayıcı desteği bilmiyorum

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

?:. Saf JavaScript için

+1

Birden çok contentEditable öğeyle çalışın. – diegoreymendez

3

Birden contenteditable unsurları vardır:

CSS ve İşaretleme pasajı

pasajını çalışan ve ya baskı öğesi deneyin için saf olduğunu. dışarı

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>

İlgili konular