2014-10-14 28 views
7

Tak więc chcę funkcji contenteditable div (wybór tekstu za pomocą klawiatury jest głównym), ale nie chcę pozwolić użytkownikowi na edycję tekstu - domyślam się, że zadziała readonly="readonly", ale niestety nie .Stwórz element ContentEditable div-only-read?

Czy wiemy, czy istnieje sposób, aby to zrobić? Element div może zawierać znaczniki zagnieżdżone (<p> 's, <h1>).

Chcę uniknąć textarea (po to jest to), ponieważ nie pozwala mi robić innych rzeczy, które muszę być w stanie zrobić.

Czy jest to dobry sposób, aby to zrobić bez javascript? A jeśli tak nie jest, czy istnieje mały fragment javascript, który nadal będzie pozwalał na kopiowanie, podświetlanie itp.?

Dzięki.

Oto przykład: http://codepen.io/anon/pen/dxeAE

+0

proszę pokazać nam swój kod –

+2

Co powstrzymuje swoją końcową użytkownika wyboru tekstu w div * bez * 'contenteditable'? Mogę używać klawiatury do zaznaczania tekstu w Chrome ... – CodingIntrigue

+0

http://codepen.io/anon/pen/dxeAE tutaj. I nie możesz wybrać tekstu tak, jak to tylko możliwe w textarea/contenteditable - potrzebuję tej funkcjonalności bez możliwości edycji :) Kluczową rzeczą tutaj jest zaznaczanie tekstu za pomocą klawiatury, a nie myszy - co oczywiście można zrobić niezależnie :) –

Odpowiedz

5

Zrobiłem rozwiązanie jquery/obejścia. Co to ma to uniemożliwić działanie domyślne, gdy klawisz jest wciśnięty:

$(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

Interesujące, przy naciśnięciu klawisza nie bierze pod uwagę shift + strzałka w górę, strzałka w dół itp. (Myślałam, że to zablokuje)? To może być idealne rozwiązanie. –

+0

Nie, nie wiem, dlaczego to nie ... Zaskoczyło mnie ...! –

+0

Będę musiał spróbować tego w innych przeglądarkach (z wyjątkiem chrome), przed potwierdzeniem, że to jest odpowiedź (muszę przetestować IE7-11), ale może to być dobrze, chyba że ktoś inny ma inną sugestię równie dobrze/dobrze :) –

1

Można również spróbować tego, zwykły javascript rozwiązanie

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

umożliwia to wybór za pomocą klawiszy strzałek i kopiowanie to samo.

+0

Uważaj na klawisze azerty/mac ... –

+1

Tak, to mnie przeraża - keyCodes może czasami nie być tym, czego oczekujesz –

+0

Ups .. btw, @AndreasFurster Twoje rozwiązanie nie działa w Mozilli (najnowszy) dla mnie –

0

Prawdopodobnie można dodać asp:Panel w div i sprawić, że panel kontrolny panel.Enabled = false będzie niedostępny.

0

aby wszystkie kontrole w ramach div zablokować lub odblokować, spróbuj tego:

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

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

Edytuj i podaj więcej informacji. Tylko kod i odpowiedź "spróbuj tego" są odradzane, ponieważ nie zawierają treści do wyszukiwania i nie wyjaśniają, dlaczego ktoś powinien "spróbować tego". – abarisone

Powiązane problemy