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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не редактируемая область в textarea 
:(
    Опции темы
Ghirik
Дата 5.2.2008, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Есть задача создать не редактируемую область в textarea. Обьясню... textarea находится в форме, нужно, чтобы изначально, при открытии формы, в textarea создавалась область в которой будет расположен какой-то текст. И этот текст нельзя было изменять пользователю, но чтобы програмно я его мог менять. При том, в процессе ввода текста пользователем, размер и содержимое этой области будет програмно изменяться.

Возможно такое сделать? Как? Покажите направление... а то, у меня ни каких мыслей.... smile 


--------------------
Отдадим всё клиенту, пускай его машина мучается...

PM MAIL   Вверх
KuZyagroup
Дата 19.2.2008, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


magento solution
**


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

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



Если правильно протелепатил сообщение то
Код

<head>
<script type="text/javascript" language="javascript">
<!-- 
function myChange1(){
    document.getElementById('myTextarea').innerHTML = "New text";
}
function myChange2(){
    document.getElementById('myTextarea').setAttribute("rows","10");
    document.getElementById('myTextarea').innerHTML += " and new size";
}

-->
</script>
</head>
<body>
    <form action="#" method="get">
     <textarea id="myTextarea"  disabled="disabled">My first text</textarea>
    </form>
    <a onclick="myChange1();">click to first change</a><br />
    <a onclick="myChange2();">click to second change</a>
</body>

PM MAIL   Вверх
bars80080
Дата 19.2.2008, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



чисто идея,

может всю эту программную область запихнуть в плавающий слой и зафиксировать над углом текстареа, так чтобы сливался, а в самом поле как-то выделить эту область, чтоб поле в это месте было уже
PM MAIL WWW   Вверх
KuZyagroup
Дата 19.2.2008, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


magento solution
**


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

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



Код

<head>
<script type="text/javascript" language="javascript">
<!-- 
function myChange1(){
    document.getElementById('myTextarea').innerHTML = "\nNew text";
}
function myChange2(){
    document.getElementById('myTextarea').setAttribute("rows","10");
    document.getElementById('myTextarea').innerHTML += " and new size";
}
function myShow(){
    alert(document.getElementById('myTextarea').innerHTML);
}
function doSizes(){
    /// тут подгон размера div под размер textarea
}
-->
</script>
</head>
<body onload="doSizes();">
    <div style="position:absolute">
    <form action="#" method="get">
      <textarea name="myTextarea" id="myTextarea" >
My first text</textarea>
    </form>
    <nobr><a onclick="myShow();">Show innerHTML of textArea</a> <br /></nobr>
    <a onclick="myChange1();">click to first change</a><br />
    <a onclick="myChange2();">click to second change</a></div>
    <div style="margin-left:0.1em; position:absolute;">noneditable text</div>
</body>


Вот визуализация начального положения.
Уже есть общая концепция реализации.
1. Просвятить меня как в textarea enter сделать (тут что-то я затупил  smile )
2. Написать перехватчик поподания курсора в текстареа под див
PM MAIL   Вверх
Sardar
Дата 19.2.2008, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



Проще вынести не редактируемую часть текста вне textarea, поверх в слое с красивым форматированием.
В крайнем случае можно убрать border'ы у textarea, примкнуть слой с текстом, обрисовать border вокруг всей композиции. Конечно при скроллинге будет видно, что фиксированный текст вне textarea.

На встречу: где это понадобилось?


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Ghirik
Дата 19.2.2008, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Спасибо за предложения, но это несколько не то. Каюсь, хреново изложил задачу.

Суть такова. Я плохо ориентируюсь в php (ни как smile ). Есть движок форума SMF, в нем редактор сообщений, в нем textarea. Я пытаюсь встроить онлайн перевод сообщений на английский язык. И как идеальный вариант, считаю перевод по одному предложению. Т.е., чел закончил ввод предложения поставил точку, и предложение сразу перевелось и появилось в textarea над его сообщением. Результирующим текстом должен быть текст в textarea на двух языках, вначале на английском, потом на русском. При вводе, можно складывать предложения в массив на случай редактирования в середине текста (для повторного перевода).

Конечно, эту задачу лучше решать средствами php, но там нужно довольно многое поменять. Во первых, лучше использовать две области ввода, две textarea. И в зависимости от того, в которую человек вводит текст, осуществлять направление перевода. Во вторых, серверный скрипт должен принять данные не из одной textarea, а из двух. И положить эти данные в базу так, чтобы потом можно было изымать их обратно для редактирования какждые в свою textarea. С этим мне не справиться. Если только кто поможет smile . 

В общем, я пока в замешательстве, и полнейшей нерешимости smile .





--------------------
Отдадим всё клиенту, пускай его машина мучается...

PM MAIL   Вверх
Sardar
Дата 19.2.2008, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



Перевод не бывает построчным (частое заблуждение), говорю как человек владеющий 3 языками.

В твоём случае достаточно div'а, внутри span'ы со строчками. При клике на span можно временно заменять его input:text'ом (в крайнем случае .designMode="on", но тогда структура может быть нарушена.). Задача муторная и приложеных усилий не стоит, будет не удобно.



--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Ghirik
Дата 19.2.2008, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

Перевод не бывает построчным (частое заблуждение), говорю как человек владеющий 3 языками.


Что значит по строчным? Я не имею ввиду строки, я говорю о законченных предложениях. Предложения ведь переводятся по отдельности?


--------------------
Отдадим всё клиенту, пускай его машина мучается...

PM MAIL   Вверх
Sardar
Дата 19.2.2008, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



Цитата(Ghirik @  19.2.2008,  14:09 Найти цитируемый пост)
Предложения ведь переводятся по отдельности?

Под строкой я имел в виду "предложение" (с большой буквы и до точки). Нет, предложения не переводятся по отдельности, если мы говорим о качественном (для людей) переводе. Построчно работает только машинный перевод, читать такое - пытка.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Itsys
Дата 20.2.2008, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

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



Мне кажется надо копать в сторону обработки события onkeydown и проверки текущей позиции курсора и вслучае нажатия кнопки в запрещенной возвращать false....
PM MAIL WWW Skype   Вверх
ksnk
Дата 20.2.2008, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



Цитата(Sardar @  19.2.2008,  17:37 Найти цитируемый пост)
Построчно работает только машинный перевод, читать такое - пытка. 
 Ооо! Классное предложение, Ghirik, по мысли Sardar'а, вам следует нанять профессионального переводчика и юзать его в режиме online-24 часа smile 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Ghirik
Дата 20.2.2008, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

Мне кажется надо копать в сторону обработки события onkeydown и проверки текущей позиции курсора и вслучае нажатия кнопки в запрещенной возвращать false.... 


Да, действительно, самое реальное решение. onkeydown по любому обрабатывать, ну и делать в самом начале проверочку позиции курсора. Мне где то даже ссылку давали на кроссбраузерный вычислитель позиции. Там даже разные шрифты/размеры можно было применять.

Я сейчас загрузил мод WYSIWYG-редактора  для SMF, буду прикручивать к своим шаблонам, ещё не видел, похоже он не на textarea... Потом буду определяться, что делать.


--------------------
Отдадим всё клиенту, пускай его машина мучается...

PM MAIL   Вверх
Itsys
Дата 20.2.2008, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

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



Для опеределения позиции курсора можно сделать так:
Код

    cursor = document.selection.createRange().duplicate();
    cursor.moveStart("textedit", -1);
    var textbefore = cursor.text;

PM MAIL WWW Skype   Вверх
Nigel
Дата 20.2.2008, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


познаю мир
**


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

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



А можно просто сменить фокус на другой элемент управления...
PM MAIL   Вверх
Ghirik
Дата 20.2.2008, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Itsys, а в котором месте получим позицию? В textbefore ведь вернется просто строка.

Цитата

А можно просто сменить фокус на другой элемент управления... 


А это как? Ну сменим фокус, ну вернем назад... И что?


--------------------
Отдадим всё клиенту, пускай его машина мучается...

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


 




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


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

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