установка позиции курсора или выделения в iframe
Вложений: 1
Здравствуйте, народ!
Что делаю: Текстовый редактор в DHTML. Проблема у меня следующая: В Internet Explorer 6 пропадает выделение и курсор текста в iframe с параметром designMode='on' при потери фокуса этого внутреннего фрейма. При программной установки фокуса на фрейм курсор оказывается в начале. Потеря фокуса происходит при щелчке на каком либо инструменте в панели инструментов, которая расспологается вне внутреннего фрейма. Задача: Сделать так чтобы восстанавливать позицию текстового курсора и выделения программно после щелчка на инструменте. Т.е. поставить фокус на iframe а затем восстановить позицию. ps: 1. Во вложении помещен простейший пример на котором мне надо решить проблему. 2. Позиция текстового курсора и выделение восстанавливается автоматически при установки фокуса на внутренний фрейм в других браузерах. Это заморочка только лишь для ИЕ но его мне как веб-разработчику нельзя игнорировать, так как этот бразуер хоть и самый нелогичный, но увы - самый расспространенный. 3. Я долго пытался найти в коде редактора Tiny этот механизм, но увы.. кода много и отследить не получилось. 4. Я также пролазил по поисковикам, но бесполезно - везде пишут об этой задачи, но для input и textArea я пробывал эти же скрипты применить к iframe с параметром designMode='on' - не прошло. 5. Была идея даже отказаться от designMode='on' в ифрейме и использовать textArea c contenteditable, но сказано что все таки предпочтителен именно iframe c designMode='on' для поддержки древних браузеров и Tiny кстати так сделан. 6. Есть на худой конец еще извращенческий вариант - засунуть в iframe textArea и в нем редактировать текст, но не хочется извращаться, и в Tiny такого извращения нет. 7. Желательно научиться считывать выделения и позицию текстового курсора а также устанавливать, даже если можно решить эту проблему без этих действий. Благодарю заранее за помощь и даже за мысленную попытку помочь ;) |
если, нет серьезных оснований делать из дива - кнопочку, и можно использовать в качестве кнопки - КНОПКУ(<input type="button">), то вопрос снимается автоматически :)
Код:
<html> |
Благодарю за решение, IIIEPJIOK, я попробую :), во время наведения можно же и динамически поверх дива подставлять кнопочку, прозрачную только.. вообщем попробую :)
|
Нашел хорошее решение.
Вложений: 1
Получилось все ж таки!!! :))) О как я рад!
В Ие надо использовать методы: var rangeMark = rang.getBookmark(); и rang.moveToBookmark(rangeMark); и в конце rang.select(); выделенной области: document.selection.createRange(); простейшая реализация во вложении: select.zip |
Что-то я не понял, в первом примере выделение действительно исчезает, но курсор в первой позиции не появляется, он просто исчезает. Во втором случае происходит то же самое. Можете пояснить? Пробовал в ИЕ-7 и Опера 9
|
Здравствуй, valenok2003.
Здесь рассматривается устранение глюка именно браузера ИЕ, в частности я работаю в ИЕ6, на ИЕ7 этот пример не проверял. В Опере и в Файрфоксе таких проблем нет, там выделение не теряется, только лишь фокус поставить требуется. Кстати, по результатам доработки текстового редактора я понял, что дело было не в методах moveToBookmark и getBookmark они как раз таки вредят в некоторых местах(не помню в каких, помню, что как их убрал - какой-то баг исчез), их можно (даже нужно) убрать, а выделение сохраняется в ИЕ сохранением и установкой объекта rang. Так что можете просто убрать в том моем примере: var rangeMark = rang.getBookmark(); и rang.moveToBookmark(rangeMark); будет тот же эффект - сохраняться выделение в ИЕ6. |
Часовой пояс GMT +3, время: 05:33. |