Tôi có một trường hợp lẻ cho các phần tử contenteditable
trong HTML. Chúng tôi có một trình soạn thảo văn bản phong phú mà khách hàng tải các mẫu được tạo sẵn (bởi chúng tôi) vào, và sau đó có thể sửa đổi mẫu đó tuy nhiên họ muốn (chủ yếu).Dòng mới và có thể chỉnh sửa được bằng các thẻ lồng nhau không thể chỉnh sửa
Các phần của mẫu của chúng tôi đã được đánh dấu là không thể chỉnh sửa trực tiếp, nhưng vẫn có thể bị xóa, v.v. Tuy nhiên, dường như có vấn đề khi một phần tử đó là phần tử đầu tiên trên một dòng (ngay sau thẻ <br/>
) và người dùng truy cập DEL
trên dòng ở trên. Vì số contenteditable=false
của mình, trình duyệt dường như không xóa <br/>
nhưng toàn bộ khoảng không thể chỉnh sửa được.
HTML mẫu là như thế này
<div contenteditable=true>
<span>blah blah blah</span><br/>
<span contenteditable="false">You cant edit this value directly</span>
</div>
Nếu người dùng đặt con trỏ của họ sau khi blah blah blah
, và truy cập DEL
toàn có thể chỉnh sửa nội dung tiếp theo sẽ bị xóa, chứ không phải là ngắt dòng.
Có cách nào, javascript hoặc cách khác, để khắc phục hành vi này không?
Tôi bị lừa xung quanh với việc cố gắng phát hiện vị trí con trỏ (sử dụng khoảng trống) và chèn khoảng trắng tạm thời, v.v., nhưng dường như tôi không thể thực hiện hành vi mong muốn, mà chỉ là thẻ không thể chỉnh sửa được mang lên đến dòng trước đó.
Chúng tôi đã giới hạn việc sử dụng trình chỉnh sửa cho Chrome chỉ, vì vậy không cần phải lo lắng về IE hoặc FF.
Là '
'một phần của mẫu của bạn? Nếu vậy, bạn có thể không chỉ sử dụng 3 'div' thay vì sử dụng'
'? –
Có. Vì lý do tôi không hoàn toàn chắc chắn (có thể là để hiển thị), chúng tôi đã ghi đè phím enter để chèn ngắt dòng thay vì cho phép trình duyệt chèn, trong trường hợp này là div. –
Một giải pháp khác có thể là kiểm soát hoàn toàn các sự kiện phím xóa. Bạn có thể sử dụng chức năng được thừa kế khi cần và chặn sự kiện khi không mong muốn. Hoặc thậm chí sử dụng 100% logic xóa tùy chỉnh. * Chỉnh sửa: * Thừa nhận nhận được vị trí caret có thể là một chút khôn lanh, nhưng nó chắc chắn là có thể. –