2011-10-18 35 views
15

Tôi đang cố gắng tìm hiểu xem có cách nào để nghe các sự kiện như focus hoặc change của phần tử HTML có thuộc tính contenteditable hay không.Lắng nghe các sự kiện của phần tử HTML có thể chỉnh sửa

Tôi có đánh dấu này html:

<p id="test" contenteditable >Hello World</p> 

Tôi đã thử những mà không thành công (JSBin):

var test = document.querySelector('#test'); 
test.addEventListener('change', function(){ 
    alert('content edited'); 
}, false); 
test.addEventListener('DOMCharacterDataModified', function(){ 
    alert('content edited'); 
}, false); 
test.addEventListener('focus', function(){ 
    alert('content edited'); 
}, false); 

Tôi không muốn nghe bàn phím hoặc chuột sự kiện. Tôi không tìm thấy bất kỳ tài liệu rõ ràng nào trong số W3CMDN về contenteditable.

Có thể nghe changefocus hoặc các sự kiện khác trên phần tử HTML có thể chỉnh sửa nội dung không?

+0

Thanh toán câu trả lời thứ hai cho câu hỏi này.http: //stackoverflow.com/questions/1391278/contenteditable-change-events – rwilliams

Trả lời

21

Không thực sự. Không có sự kiện change cho các yếu tố contenteditable và cũng không có sự kiện HTML5 input, mặc dù tôi nghĩ rằng sự kiện đó cuối cùng sẽ xuất hiện. Đó là một nỗi đau.


CẬP NHẬT 23 Tháng sáu 2012

WebKit gần đây hỗ trợ các sự kiện HTML5 input trên contenteditable yếu tố, cũng như Firefox 14.


focus Tuy nhiên, làm việc, cũng như DOMCharacterDataModified trong hầu hết các trình duyệt (mặc dù đáng chú ý là không phải là IE < 9). Xem http://jsfiddle.net/UuYQH/112/

Bằng cách này, contenteditable không phải là thuộc tính Boolean: nó yêu cầu giá trị, phải là một trong "true", "false", "inherit" và chuỗi trống (tương đương với "true")).

+0

Cảm ơn, fiddle của bạn không hoạt động trong Chrome của tôi. Cũng 'contenteditable' là chính xác dựa trên tài liệu Tôi nghĩ rằng – Mohsen

+0

@Mohsen: Làm việc cho tôi trong Chrome. Nó có lẽ là không rõ ràng, nhưng ý tưởng là gõ vào div contenteditable ở đầu chứ không phải là texarea, đó là có để đăng nhập các sự kiện. –

+0

@Mohsen: Tôi nên thêm một liên kết đến thông số HTML5 cho thuộc tính 'contenteditable'. Dưới đây là: http://www.w3.org/TR/html5/editing.html#contenteditable –

2

Tôi biết điều này là khá muộn nhưng jQuery dường như để làm việc với tập trung, kiểm tra ví dụ này ra:

http://jsfiddle.net/powerphillg5/EGtSC/

$("#test").focus(function(){ 
    $("#log").append("<li>Item Focused</li>"); 
}); 

Tôi hy vọng điều này sẽ giúp, nhưng nếu nó không phải là những gì bạn đang tìm kiếm tôi sẽ khiêm tốn chấp nhận phiếu bầu.

1

Làm mờ (khi khu vực mất tiêu điểm) và tập trung cả hai hoạt động. Ít nhất với jQuery. Thử nghiệm với Chrome 28 và Safari 6.

$("#test").blur(function(){ 
    $("#log").append("<li>Item lost focus</li>"); 
}); 
1

contenteditable đã được giới thiệu cách trở lại trong trình duyệt IE 5.5, nó được hỗ trợ bởi JavaScript 1.1/1.2 API và ứng dụng đầu tiên iframe, sau đó để Bảo hiểm tiền gửi. Nó được hỗ trợ trong tất cả các trình duyệt ở một mức độ nào đó. Bây giờ trong HTML5 spec hầu hết các yếu tố có thể chấp nhận thuộc tính này (nhưng hãy cẩn thận tương thích ngược). hỗ trợ sự kiện onchange có thể áp dụng vẫn để tạo thành các phần tử như ban đầu được thiết kế, ít có liên quan đến thuộc tính này. Tùy chọn của bạn vẫn là các sự kiện nhấn phím, dễ nắm bắt và khi được kết hợp với một kiểm tra cho các phần tử đích, bạn sẽ có kết quả tương tự với việc thay đổi. Nó có thể không được lý tưởng cho các trường hợp cạnh nhưng đối với hầu hết các trường hợp sử dụng tôi sẽ đi tuyến đường này và tương thích ngược nhất của nó quá.

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