Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Возврат фокуса в iframe 
:(
    Опции темы
voronov
Дата 17.3.2007, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 7.10.2006

Репутация: нет
Всего: нет



проблема в следующем:
есть iframe с designMode='on'...при вызове формы выбора файла, данный iframe терает фокус ввода(курсор)...как сделать чтобы при закрытии формы выбора файла ....курсор возврашался на прежнее место 

Можно конечно  сохранить позицию курсора...а потом ее востановить...но можно ли как то проще?

Заранее спасибо за ответы
PM MAIL   Вверх
JSman
Дата 18.3.2007, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 279
Регистрация: 10.7.2006

Репутация: нет
Всего: 4



 .focus не помогает?
PM ICQ   Вверх
paralmix
Дата 18.3.2007, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 30.10.2005

Репутация: нет
Всего: нет



Цитата

focus не помогает? 


Нет...фокус устанавливает курсов в начало текста...мне же надо вернуть кусрор в ту позицию где он был до потери фокуса
PM MAIL   Вверх
JSman
Дата 18.3.2007, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 279
Регистрация: 10.7.2006

Репутация: нет
Всего: 4



ну тогда точно придется заморачиваться с textrange.

вот и исходник. найдешь много полезных функций. писал для ие.
Код


// filename TextObject.js

// JSman

window.attachEvent("onload", TextObject);

function TextObject() {
    var _ = new Object(); // var _ = this;
    
    /*
    properties:
        lastElement  - last activated element
    
    methods:
        insert(text[, element]) - adding text at TextRangePos of editable element; 
        storeTextRange (element) - storing TextRange position in editable element;
        register([wnd])
        registerAll()
        getWordAtCursor()
    */

    //-property-----------------------------
    _.lastElement = null;
    
    //-methods-----------------------------
    _.insert = TextObject_insert;
    _.storeTextRange = TextObject_storeTextRange;
    _.register = TextObject_register;
    _.registerAll = TextObject_registerAll;
    _.getWordAtCursor = TextObject_getWordAtCursor;

    
    
    function constructor() {        
        _.registerAll();        
        }


    constructor();
   //---------------------------------
    function addWord () {
    var s, el=event.srcElement.innerText, e;
        s = (el.indexOf(' ') != -1)? '"' + el + '"' : el; 
         _.insert(' ' + s + ' ');
         try {
         if (_.lastElement) _.lastElement.focus(); }
         catch (e) {}
       }

    //--------------------------------
    /*function TextObject_window_frame_register_onload( _wnd, _id) {
    //_wnd.document.all(_id).attachEvent("onload", function () {_.register(_wnd.document.frames(_id));});    
        }
*/
    //--------------------------------
    function TextObject_register() {
  var i=0, el, doc, wnd;

            function getEvent() {
            
            _.storeTextRange(wnd, wnd.event.srcElement);
            //_.getWordAtCursor(wnd);
                }
            
            function anchor_click() {
            el = wnd.event.srcElement;
            //document.title = el.tagName == "A" && el.parentElement.className == "addword";
            if (el.tagName == "A" && el.parentElement.className == "addword") addWord(); 
                }



    if (arguments.length>0) 
        wnd = arguments[0]; else wnd = window;    
        
        doc = wnd.document;
//alert();
        doc.attachEvent ("onclick", anchor_click);
//alert();
        doc.attachEvent ("onselect", getEvent );

     while (i<doc.all.length)
       {  
            el = doc.all.item(i);

///*
            if (el.isContentEditable ||  el.className == "editable")
                {
                el.attachEvent('onclick', getEvent);
                el.attachEvent('onselect', getEvent);
                el.attachEvent('onkeyup', getEvent);
                }
 /*            
            if (el.tagName=="IFRAME") {
                //alert(el.id);
                if (!el.id) el.id = "ID_FRAME_"+i.toString();
                if (!el.name) el.name = "ID_FRAME_"+i.toString();
                }
            
// */        
        i++;
       }

       return;   
       }
//------------------------------------------------------------
function TextObject_registerAll() {

var wnd, frame, collection, i=0;

if (arguments.length) wnd = arguments[0]; else wnd = window;

collection = wnd.document.all.tags("IFRAME")

    _.register();

///*
    if (collection.length>0)
        {
            while (i<collection.length){
            
            frame = collection.item(i);
            _.register(frame.contentWindow);
            //_.register(wnd.frames.item(i));
            //frame.attachEvent("onload", function () {_.register(frame.contentWindow);});
            frame.attachEvent("onload", new Function ('_.register(frame.contentWindow);'));
            //TextObject_window_frame_register_onload(window, frame.id);
        
            i++;
            
            }
        
        
        }
//*/        
}
//------------------------------------------------------------         
    function TextObject_insert(){ 
       var el, txt, e;
       
       if (arguments.length==0) return;   
       if (arguments.length>0) txt = arguments[0];   
       if (arguments.length>1) el = arguments[1]; else el = _.lastElement;
       
       try {
               if (el && el.TextRangePos)           
                      { 
                //      alert(el.TextRangePos);
                      el.TextRangePos.text=txt; 
                      el.TextRangePos.collapse(false);
                      el.TextRangePos.select();
                     
                      }
    
               else if (el)
                       {el.value+=txt; 
                       }
    
       } catch(e) {}
    }

//------------------------------------------------------------
function TextObject_storeTextRange(wnd,el) 
   { var e;
           if (wnd.document.selection && wnd.document.selection.createRange) {
                    try {
                    el.TextRangePos=wnd.document.selection.createRange().duplicate();
                   _.lastElement = el;
                    } catch (e) {}
           }
   }
//------------------------------------------------------------

function TextObject_getWordAtCursor() {
///*
            var word, o;
            //word.text = '';
            if (arguments.length ==1) wnd = arguments[0];
            o = wnd.event.srcElement;
            //alert();
            try {
            word = o.TextRangePos.duplicate();
            //alert(); 
            word.moveStart('word',-1);
            word.moveEnd('word');
            }
            catch (e) {word = new Object(); word.text=''; };
            //document.title = ('\"  ' + word.text + '\"');
//*/
    return word.text;
    }

//-----------------------------------------------------------
}
    




смысл кода был в том, что я сначала активирую текстовое поле, потом кликаю на ссылку с class 
    "addword" и вставляется текст ссылки в поле ввода. легко изменить код под себя.

Это сообщение отредактировал(а) JSman - 18.3.2007, 17:51
PM ICQ   Вверх
S.A.P.
Дата 18.3.2007, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2664
Регистрация: 11.6.2004

Репутация: 8
Всего: 71



Здесь что - то не так. Курсор по идее должен возвращаться на прежнее место (сам делал), если только ты не перезаписываешь контент через innerHTML.  Еще был подобный баг с фокусом, если с ифрейма уходишь нажатием на div или подобный элемент (уже не помню в чём точно он выражался).

У тебя есть страничка, где можно покрутить этот wysiwyg?
PM MAIL   Вверх
voronov
Дата 18.3.2007, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 7.10.2006

Репутация: нет
Всего: нет



Цитата

перезаписываешь контент через innerHTML

нет ... для форматирования текста были спользован метод execCommand

Цитата

У тебя есть страничка, где можно покрутить этот wysiwyg? 

нет ... но за основу редактора был взят:
http://xpoint.ru/know-how/WYSIWYG/TrueJavaScriptEditor

Цитата

Курсор по идее должен возвращаться на прежнее место


по идеи и я так думал...но при возвращение из диалога открытия файла, курсор на место не возвращается( при использовании метода focus(), курсор становиться в начало

конечно можно сохранять позицию курсора перед открытия диалога...и восстановливать после закрытия...но ведь наверное можно как то проще...
PM MAIL   Вверх
JSman
Дата 18.3.2007, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 279
Регистрация: 10.7.2006

Репутация: нет
Всего: 4



смотри TextObject_storeTextRange, TextObject_insert. специально же написал
PM ICQ   Вверх
voronov
Дата 18.3.2007, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 7.10.2006

Репутация: нет
Всего: нет



Цитата

смотри TextObject_storeTextRange, TextObject_insert. специально же написал


мда...спасибо
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0463 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.