2012-03-30 37 views
7

Tôi đang cố gắng kiểm tra xem liệu div có thể chỉnh sửa có tập trung hay không, nhưng tôi đang gặp một số sự cố. Đây là mã của tôi cho đến thời điểm này:Xem liệu div ContentEditable có tập trung

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

Vấn đề là luôn luôn trả về "Đã tập trung" ngay cả khi không. Cách tốt nhất để làm gì?

Cập nhật: Lý do làm việc này là để xem con trỏ có ở vị trí mong muốn trước khi chèn phần tử mới hay không. Nếu không, nếu vị trí cuối cùng mà người dùng nhấp vào trong tiêu đề, thì khi tôi khôi phục lựa chọn bằng Rangy và thay thế bằng phần tử mới, nó sẽ kết thúc trong tiêu đề. Tôi cần một cách để tìm hiểu xem div có thể chỉnh sửa được tập trung/có con trỏ trong đó hay không, vì vậy nếu không, tôi sẽ chỉ cần thêm phần tử mà tôi chèn vào cuối.

Cập nhật 2: Dưới đây là một JSFiddle minh họa vấn đề của tôi: http://jsfiddle.net/2NHrM/

+0

Kiểm tra cập nhật của tôi dưới Hoặc: – iambriansreed

+0

Bạn đã bao giờ tìm thấy một giải pháp? – iambriansreed

+0

Tôi đã cập nhật Fiddle bằng cách sử dụng câu trả lời của @ iambriansreed dưới đây để nó hoạt động. – Irwin

Trả lời

9

Hãy thử:

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

Hoặc:

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

Kiểm tra contenteditable_focused trước khi thực hiện kịch bản của bạn.

Hoặc:

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

Hmm ngược lại, luôn trả về "không có tiêu điểm" ... – Adam

+0

Sau đó, nó không có tiêu điểm. – iambriansreed

+0

... nhưng có. Ngay sau đó tôi đang sử dụng Rangy để lưu vùng chọn, nó hoạt động tốt. – Adam

0

Bạn có thể thử này

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

Có lẽ nếu bạn sẽ cho chúng tôi biết những gì bạn đang cố gắng để đạt được, chúng tôi sẽ có một sự giúp đỡ nhiều hơn nữa. Trong khi đó, bạn có thể đọc ở đây: http://api.jquery.com/focus-selector/.

+0

Được rồi, cập nhật bài đăng gốc của tôi với giải thích về những gì tôi đang cố gắng làm. (Tôi đã thử của bạn và nó dường như không hoạt động). – Adam

+0

Nếu bạn theo liên kết tôi đã đăng, bạn sẽ thấy điều này: _Nếu bạn đang tìm kiếm phần tử hiện đang tập trung, $ (document.activeElement) sẽ truy xuất nó mà không phải tìm kiếm toàn bộ cây DOM._ –

2

gì về điều này ?:

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

Tôi không biết trình duyệt tốt như thế nào hỗ trợ cho điều này là nhưng ít nhất Chrome và Firefox hỗ trợ nó.

+1

Sẽ không làm việc ở tất cả với nhiều yếu tố contentEditable. – diegoreymendez

3

Đối tinh khiết JavaScript khi bạn có nhiều yếu tố contenteditable:

CSS và Markup là hoàn toàn cho đoạn

Hãy thử chạy đoạn mã và nhấn một trong hai yếu tố.

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>

Các vấn đề liên quan