2014-10-14 13 views
7

Vì vậy, tôi muốn các tính năng của div có thể chỉnh sửa (lựa chọn văn bản qua bàn phím là bàn phím chính), nhưng tôi không muốn cho phép người dùng chỉnh sửa văn bản - tôi giả sử là readonly="readonly". .Thực hiện chỉ đọc div có thể chỉnh sửa nội dung?

Chúng tôi có biết cách nào để làm điều đó không? Div có thể chỉnh sửa có thể có các thẻ lồng nhau bên trong (<p> 's, <h1>' s).

Tôi muốn tránh một textarea (đó là những gì này là cho), vì nó không cho phép tôi làm những việc khác tôi cần để có thể làm.

Có cách nào hay để làm điều này mà không có javascript? Và nếu không có, là có một đoạn nhỏ của javascript mà vẫn sẽ cho phép sao chép, làm nổi bật vv?

Cảm ơn.

Dưới đây là một ví dụ: http://codepen.io/anon/pen/dxeAE

+0

xin vui lòng cho chúng tôi xem mã của bạn –

+2

gì là dừng cuối người dùng chọn văn bản của bạn trong một div * không * 'contenteditable'? Tôi có thể sử dụng bàn phím để chọn văn bản trong Chrome ... – CodingIntrigue

+0

http://codepen.io/anon/pen/dxeAE tại đây bạn đi. Và bạn không thể chọn văn bản theo cách bạn có thể trong vùng văn bản/có thể chỉnh sửa được - tôi cần chức năng đó mà không có tùy chọn chỉnh sửa :) Điều quan trọng ở đây là chọn văn bản bằng bàn phím chứ không phải chuột - có thể được thực hiện bất kể :) –

Trả lời

5

tôi đã thực hiện một giải pháp jquery/workaround. Có gì là không là ngăn chặn hành động mặc định khi một phím được nhấn:

$(document).ready(function(){ 
 
    $("#editor").on("keypress", function(e) { 
 
     e.preventDefault(); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<div id="editor" contenteditable=""> 
 
    <h1>Heading</h1> 
 
    <p>Test</p> 
 
</div>

+0

Thú vị, trên nhấn phím không đưa vào tài khoản shift + mũi tên lên, mũi tên xuống vv (Tôi đã nghĩ rằng nó sẽ chặn nó)? Đây có thể là giải pháp hoàn hảo –

+0

Không, tôi không biết tại sao nó lại không ... Tôi ngạc nhiên ...! –

+0

Tôi sẽ phải thử điều này trong các trình duyệt khác (ngoại trừ chrome), trước khi xác nhận đây là câu trả lời (tôi cần kiểm tra IE7-11), nhưng điều này cũng có thể, trừ khi bất kỳ ai khác có đề xuất bằng nhau/tốt hơn :) –

1

Bạn cũng có thể thử loại này, đồng bằng javascript giải pháp

document.getElementById('div').onkeydown = function (e) { 
    var event = window.event ? window.event : e; 
    return !(!~[37, 38, 39, 40].indexOf(e.keyCode) && !e.ctrlKey); 
} 

này cho phép lựa chọn sử dụng các phím mũi tên và sao chép giống nhau.

+0

Xem phần bàn phím azerty/mac ... –

+1

Vâng, điều đó làm tôi sợ - đôi khi mã phím có thể không phải là điều bạn mong đợi –

+0

Rất tiếc .. btw, @AndreasFurster giải pháp của bạn không hoạt động trong Mozilla (mới nhất) cho tôi –

0

Bạn có thể thêm asp:Panel vào số div và làm cho bảng điều khiển panel.Enabled = false bên trong sẽ không thể truy cập được.

0

Để thực hiện tất cả các điều khiển trong một div khóa hoặc mở khóa, hãy thử này:

<div id="lockableDiv"> 
.... 
</div> 

lockDiv = function(lockIt){ 
    if(lockIt){  
     $('#lockableDiv :input').attr('readonly', true); 
    }else{ 
     $('#lockableDiv :input').removeAttr('readonly'); 
    } 
} 
+0

Vui lòng chỉnh sửa với nhiều thông tin hơn. Các câu trả lời chỉ có mã và "dùng thử" này không được khuyến khích, bởi vì chúng không chứa nội dung có thể tìm kiếm được và không giải thích tại sao một người nào đó nên "thử cái này". – abarisone

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