Mam div z tekstem i contenteditable = "true". Kiedy pojedynczo klikam na tym div - działa kilka moich skryptów, nie jest to bardzo ważne. I kiedy dwukrotnie klikam na tym div - trzeba edytować tekst w div. Edytuj tekst musi być tylko po dwukrotnym kliknięciu, a nie po singlu. I bardzo ważne, gdy dwukrotnie klikam na div - opiekun musi pozostać pod kursorem myszy. Nie ma potrzeby wyboru tekstu. Znalazłem jakiś skrypt dla pojedynczego/podwójnego. Ale mam problem. Po dwukrotnym kliknięciu div - tekst są zaznaczone. Wybór nie jest potrzebny. Potrzebujesz pomocy redaktora, gdzie kliknąłem. Nie rozumiem jak. http://jsfiddle.net/X6auM/Wybór tekstu w div (contenteditable) po dwukrotnym kliknięciu
Odpowiedz
Każda obecna większa przeglądarka udostępnia interfejs API do tworzenia zakresów od zdarzenia myszy, chociaż potrzebne są cztery różne gałęzie kodu.
Oto tło:
- https://stackoverflow.com/a/10659990/96100
- https://stackoverflow.com/a/12705894/96100
- Creating a collapsed range from a pixel position in FF/Webkit
Oto demo: http://jsfiddle.net/timdown/krtTD/10/
A oto niektóre kod:
function getMouseEventCaretRange(evt) {
var range, x = evt.clientX, y = evt.clientY;
// Try the simple IE way first
if (document.body.createTextRange) {
range = document.body.createTextRange();
range.moveToPoint(x, y);
}
else if (typeof document.createRange != "undefined") {
// Try Mozilla's rangeOffset and rangeParent properties,
// which are exactly what we want
if (typeof evt.rangeParent != "undefined") {
range = document.createRange();
range.setStart(evt.rangeParent, evt.rangeOffset);
range.collapse(true);
}
// Try the standards-based way next
else if (document.caretPositionFromPoint) {
var pos = document.caretPositionFromPoint(x, y);
range = document.createRange();
range.setStart(pos.offsetNode, pos.offset);
range.collapse(true);
}
// Next, the WebKit way
else if (document.caretRangeFromPoint) {
range = document.caretRangeFromPoint(x, y);
}
}
return range;
}
function selectRange(range) {
if (range) {
if (typeof range.select != "undefined") {
range.select();
} else if (typeof window.getSelection != "undefined") {
var sel = window.getSelection();
sel.removeAllRanges();
sel.addRange(range);
}
}
}
document.getElementById("editor").ondblclick = function(evt) {
evt = evt || window.event;
this.contentEditable = true;
this.focus();
var caretRange = getMouseEventCaretRange(evt);
// Set a timer to allow the selection to happen and the dust settle first
window.setTimeout(function() {
selectRange(caretRange);
}, 10);
return false;
};
To niesamowite! Wczoraj zrobiłem kilka innych metod. Ale nie działa bardzo dobrze. Twoja wersja działa poprawnie. Dziękuję Ci! –
$('p').dblclick(function(event) {
$this = $(this);
$this.attr('contenteditable', "true");
$this.blur();
$this.focus();
});
Sugestia, twoja odpowiedź byłaby kompletna, gdybyś wyjaśnił, co robisz również. –
- 1. Zapobieganie zaznaczaniu tekstu po dwukrotnym kliknięciu
- 2. Jak uniemożliwić zaznaczanie tekstu przy dwukrotnym kliknięciu?
- 3. Negatywne wcięcie tekstu powoduje duży wybór linku po kliknięciu
- 4. .exe zamyka się natychmiast po uruchomieniu po dwukrotnym kliknięciu
- 5. Zmiana koloru DIV po kliknięciu innego DIV
- 6. Stwórz element ContentEditable div-only-read?
- 7. Ukryj DIV po kliknięciu poza
- 8. Sposób wstrzymania pliku wsadowego Windows po dwukrotnym kliknięciu?
- 9. MKAnnotationView znika po przesunięciu palcem i dwukrotnym kliknięciu
- 10. RecyclerView pojedyncze kliknięcie nie działa, ale działa po dwukrotnym kliknięciu
- 11. Jak wybrać cały tekst w contenteditable div?
- 12. jquery Ustawianie pozycji kursora w contenteditable div
- 13. Wybierz zakres w contenteditable div
- 14. div contentEditable ale Readonly
- 15. jak wyłączyć elementy w contenteditable div?
- 16. powrócić do contenteditable po execCommand?
- 17. Dlaczego dokument.execCommand nie działa po kliknięciu elementu div?
- 18. Sprawdź przycisk radiowy po kliknięciu DIV
- 19. 50%/50% div, po kliknięciu 100% animacji
- 20. Jquery show div po kliknięciu linku
- 21. Wkładanie mathjax do contenteditable div
- 22. Zapobieganie wystrzeliwaniu fokusu po kliknięciu elementu div
- 23. Usuń klasę po kliknięciu poza div
- 24. ukrywanie DIV po kliknięciu od niego
- 25. Wyłącz zaznaczenie DIV po kliknięciu na niego
- 26. Wybór tekstu w WebView?
- 27. Android TextView: Zmień kolor tekstu po kliknięciu
- 28. Nie wiem, jak ukryć div po kliknięciu poza div
- 29. zastąpić wybrany tekst w contenteditable div
- 30. org.apache.xmlbeans.impl.values.XmlValueDisconnectedException po dwukrotnym zapisaniu skoroszytu
Pojedyncze kliknięcie, aby edytować jest oczekiwany wynik dla 'contenteditable' elementu. Jeśli chcesz użyć podwójnego kliknięcia, ustaw 'contenteditable' * only * tylko wtedy, gdy element zostanie podwójnie kliknięty. Po dokonaniu edycji ustaw ostrość na elemencie, a następnie ustaw daszek na podstawie pozycji myszy w zdarzeniu z podwójnym kliknięciem. Na koniec, gdy fokus zostanie utracony, wyłącz "contenteditable". – Jay
Nie rozumiem, jak umieścić kursor dokładnie w miejscu, w którym nastąpiło kliknięcie. To z .focus(). Ale uważaj, idź do początku linii. http://jsfiddle.net/jupUh/ –
Jak mogę znaleźć pozycję karetki, jeśli nie było jej w div? –