Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.02.2009, 17:21
Аспирант
Отправить личное сообщение для mister_maxim Посмотреть профиль Найти все сообщения от mister_maxim
 
Регистрация: 09.02.2009
Сообщений: 57

установка позиции курсора или выделения в iframe
Здравствуйте, народ!
Что делаю:
Текстовый редактор в 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. Желательно научиться считывать выделения и позицию текстового курсора а также устанавливать, даже если можно решить эту проблему без этих действий.
Благодарю заранее за помощь и даже за мысленную попытку помочь
Вложения:
Тип файла: zip select.zip (1.3 Кб, 26 просмотров)
Ответить с цитированием
  #2 (permalink)  
Старый 10.02.2009, 17:14
Аспирант
Отправить личное сообщение для IIIEPJIOK Посмотреть профиль Найти все сообщения от IIIEPJIOK
 
Регистрация: 23.12.2008
Сообщений: 75

если, нет серьезных оснований делать из дива - кнопочку, и можно использовать в качестве кнопки - КНОПКУ(<input type="button">), то вопрос снимается автоматически
Код:
<html>
  <body id="body" onload="document.getElementById('ifr').contentWindow.document.designMode='on'">
    <input type="button" onclick="alert(document.getElementById('ifr').contentWindow.document.selection.createRange().text)">
     <iframe id="ifr" frameborder="1"  src="1.txt"></iframe>
  </body>
</html>
Ответить с цитированием
  #3 (permalink)  
Старый 11.02.2009, 09:36
Аспирант
Отправить личное сообщение для mister_maxim Посмотреть профиль Найти все сообщения от mister_maxim
 
Регистрация: 09.02.2009
Сообщений: 57

Благодарю за решение, IIIEPJIOK, я попробую , во время наведения можно же и динамически поверх дива подставлять кнопочку, прозрачную только.. вообщем попробую
Ответить с цитированием
  #4 (permalink)  
Старый 25.02.2009, 16:19
Аспирант
Отправить личное сообщение для mister_maxim Посмотреть профиль Найти все сообщения от mister_maxim
 
Регистрация: 09.02.2009
Сообщений: 57

Нашел хорошее решение.
Получилось все ж таки!!! )) О как я рад!
В Ие надо использовать методы:
var rangeMark = rang.getBookmark();
и
rang.moveToBookmark(rangeMark);
и в конце rang.select();
выделенной области:
document.selection.createRange();
простейшая реализация во вложении: select.zip
Вложения:
Тип файла: zip select.zip (1.7 Кб, 63 просмотров)
Ответить с цитированием
  #5 (permalink)  
Старый 16.04.2009, 11:46
Аватар для valenok2003
Новичок на форуме
Отправить личное сообщение для valenok2003 Посмотреть профиль Найти все сообщения от valenok2003
 
Регистрация: 09.04.2009
Сообщений: 8

Что-то я не понял, в первом примере выделение действительно исчезает, но курсор в первой позиции не появляется, он просто исчезает. Во втором случае происходит то же самое. Можете пояснить? Пробовал в ИЕ-7 и Опера 9
Ответить с цитированием
  #6 (permalink)  
Старый 18.04.2009, 10:43
Аспирант
Отправить личное сообщение для mister_maxim Посмотреть профиль Найти все сообщения от mister_maxim
 
Регистрация: 09.02.2009
Сообщений: 57

Здравствуй, valenok2003.
Здесь рассматривается устранение глюка именно браузера ИЕ, в частности я работаю в ИЕ6, на ИЕ7 этот пример не проверял. В Опере и в Файрфоксе таких проблем нет, там выделение не теряется, только лишь фокус поставить требуется.
Кстати, по результатам доработки текстового редактора я понял, что дело было не в методах
moveToBookmark
и
getBookmark
они как раз таки вредят в некоторых местах(не помню в каких, помню, что как их убрал - какой-то баг исчез), их можно (даже нужно) убрать, а выделение сохраняется в ИЕ сохранением и установкой объекта rang. Так что можете просто убрать в том моем примере: var rangeMark = rang.getBookmark(); и rang.moveToBookmark(rangeMark); будет тот же эффект - сохраняться выделение в ИЕ6.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск