ContentEditable положение курсора / стиль в FireFox
У меня возникают проблемы с использованием contentEditable в FireFox 3. У меня проблема, когда курсор появляется над или только частично в элементе div после того, как я нажимаю на него (пока я не начну печатать, когда он будет работать правильно). Любые идеи о том, как я могу предотвратить это?
HTML:
Тестовая страница title> head> <Тело> div> DIV> Body> Html>
6 ответов
Я ждал и использовал контент, редактируемый только в Firefox 4 и выше. Я подал это и несколько других ошибок, которые команда Mozilla исправила для FF 4.
У меня точно такая же проблема с Firefox 37.0.2. Помещение пробела нулевой ширины в псевдоэлемент contenteditable's:before решает проблему:
.contenteditable:empty:before {
content: "\200B";
display: inline;
}
Исправление работает во всех современных браузерах, включая IE11, который также имеет проблему с позицией каретки, очень похожую на Firefox.
Вам нужно поместить какой-то контент или HTML между DIV, который вы хотите редактировать:
<div id="input" style="width:100%; height:100%; border:1px solid black; outline:none" contentEditable="true">Some sort of content or HTML here.</div>
Я часами ломал голову, пытаясь найти способ взломать это. Я придумал обернуть редактор в div, который по умолчанию скрыт. Затем используйте небольшой встроенный JavaScript для отображения div. Это, кажется, заставляет курсор перейти в правильное положение. Это грязно, но это работает!
<div id="editor" style="display: none;">
<% call RTE.renderTextArea(true) %>
</div>
<script>document.getElementById("editor").style.display="";</script>
Я также столкнулся с этой проблемой в последней версии FF 22. В моем случае мой внешний div (например, "редактор", как указано выше) не имел высоты, и моя позиция курсора была ниже contenteditable div. Обеспечивая высоту внешнему элементу, например, height: 1.5em;
курсор правильно позиционируется.
Это может быть решено путем создания слепого div и добавления фокуса к нему, тогда ваш браузер не сфокусирован на элементе contenteditable, но пользователь должен нажать на него, и в этом случае он показывает курсор в нужном месте.
$(document).ready(function(){
$("#target_blind").focus();
});
<div id="target_blind" style="display:none;"></div>
<div id="target" contenteditable="true"></div>
Есть один способ, но он не решает проблему, а только умнее.