Правила  •  FAQ  •  Поиск  •  Пользователи  •  Группы
Профиль  •  Войти и проверить личные сообщения  •  Вход  •  Регистрация 
 
 
Поможите написать скрипт на Java-Script
 
Начать новую тему   Ответить на тему    Список форумов FREESTUDENTS -> Архив
 
Автор Сообщение
roman koff



Репутация: +2   
Пол: <br />Пол:Муж
Откуда: Санкт-Петербург Сообщения: 373
Стаж: 2 года 10 месяцев
Сообщение28.11.2006 16:47 Поможите написать скрипт на Java-Script Ответить с цитатой

Как реализовать на JS (на сторне клиента, разумеется) следующую простую задачу:
Имеется текстовое поле ввода (для редактирования документа)
Необходимо, чтобы после ввода пользователем символа ">", в том случае если введенному символу предшествует конструкция
Код:
<[a-z][a-z09]*
- после введенного символа добавлялась конструкция </тег>, где тег - то, что предшествовало введенному символу до символа "<"
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Mikelangelo



Репутация: 0    Сообщения: 145
Стаж: 3 года 4 месяца
Сообщение28.11.2006 23:12 Ответить с цитатой

Насколько я понимаю, в том виде,в котором сформулирована задача,написать невозможно. Есть текстовое поле
<input> или <TextArea>,по событию onchange(изменение информации,введенной в поле) вызывается некая функция,например,change(),проверяющая все условия (Был ли введен открывающий тег,являяется ли последний символ '<' и пр).ТЕОРЕТИЧЕСКИ onchange происходит после введения каждого нового символа,НА ПРАКТИКЕ оно случается когда пользователь вввел некий текст и кликнул мышкой за пределами формы...То есть после введения '<' для закрытия тега пользователю нужно кликнуть по страничке(или по самой форме если мы используем не onchange,а onclick),а это,как я думаю, уже не то,что тебе надо....


_________________
У каждого Гребенщикова есть свое "Все идет по плану"
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
roman koff



Репутация: +2   
Пол: <br />Пол:Муж
Откуда: Санкт-Петербург Сообщения: 373
Стаж: 2 года 10 месяцев
Сообщение29.11.2006 11:00 Ответить с цитатой

В том то и проблема.

Вообще задача разделяется на две подзадачи:
1. Отловить ввод символа (символ и позиция в текста);
2. Вставить в текст (в позицию курсора) некий другой текст.

Желательно, чтобы работало под любым броузером. Явно как сделать я не знаю, т.к. с явяскрипт не дружу.

Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Kast2K



Репутация: +2   
Возраст: 23
Гороскоп: Рак Год Крысы
Пол: <br />Пол:Муж Сообщения: 3363
Стаж: 3 года 3 месяца
Сообщение29.11.2006 11:04 Ответить с цитатой

а почему бы не перехватывать нажатие клавиш клавиатуры в данном окне?

_________________
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Mikelangelo



Репутация: 0    Сообщения: 145
Стаж: 3 года 4 месяца
Сообщение29.11.2006 12:24 Ответить с цитатой

roman koff писал(а):
В том то и проблема.

Вообще задача разделяется на две подзадачи:
1. Отловить ввод символа (символ и позиция в текста);
2. Вставить в текст (в позицию курсора) некий другой текст.

Желательно, чтобы работало под любым броузером. Явно как сделать я не знаю, т.к. с явяскрипт не дружу.


Вторая задача не вопрос.В JavaScript достаточно функций работы со строками(точнее методов объекта String),(например,определение длинны строки или выбор подстроки с определенных позиций).Вечером поколдую.

А вот первая меня реально смущает.Возможно,в словах Kast2K есть резон


_________________
У каждого Гребенщикова есть свое "Все идет по плану"
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
NightFlash



Репутация: +2/–1    Сообщения: 405
Стаж: 2 года 4 месяца
Сообщение30.11.2006 2:16 Ответить с цитатой

Начнем с того, что в искомом textarea или input надо использовать метод onKeyUp, который будет вызываться после каждого введенного символа.

Также мы определим что введено, в нашей функции надо использовать window.event.keyCode это и есть номер введенной клавиши:
188 - "<"
190 - ">"

Для тех умных кто скажет юзать onKeyPress и onKeyDown поясняю, что во-первых обработать надо после ввода символа (down) во-вторых корректно обработать одновременное нажатие с shift'ом (press).

Продолжим. Определять положение вовсе не нужно, мы пойдем более хитрым путем.

var selectionRange=document.selection.createRange();
selectionRange.pasteHTML(html);


Эта штука будет добавлять текст (то, что в переменной html) туда, где стоит курсор (или заместо того, что выделено в документе). Всяческие проверки я не даю, сами додумаетесь.

Насчет использования регулярного выражения... я подумал и решил нафиг, ведь надо убедится что мы рассматриваем только последний тэг. Так вот, просто после каждого "<" мы пишем в глобальную переменную все до ">" и потом используем это =) логически это будет последний введенный тэг.

Генерируем наш закрывающий тэг и вставляем так, как я уже писал, вуаля.

Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Kast2K



Репутация: +2   
Возраст: 23
Гороскоп: Рак Год Крысы
Пол: <br />Пол:Муж Сообщения: 3363
Стаж: 3 года 3 месяца
Сообщение30.11.2006 9:38 Ответить с цитатой

NightFlash
мозг Смайлик


_________________
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Mikelangelo



Репутация: 0    Сообщения: 145
Стаж: 3 года 4 месяца
Сообщение30.11.2006 11:01 Ответить с цитатой

Вот такой вариант. Правда не учтено,что теги могут быть с атрибутами,может еще чего.

<script language="JavaScript">
function change()


{
var last= new String();
var lastinput=0;
//alert(window.event.keyCode);
// alert("111");

if (window.event.keyCode==188)
{
last=document.getElementById('inp').value;
lastinput=last.lastIndexOf("<");
lastoutput=last.lastIndexOf(">");

if(lastinput>lastoutput & lastoutput!=-1 & lastinput%2!=0)
{
last=last.substring(1,last.length-1);
lastinput=last.lastIndexOf("<");
// alert(last);
tagname=last.substring(lastinput+1,lastoutput);
alert(tagname);
document.getElementById('inp').value=document.getElementById('inp').value+"/"+tagname;
}
}
}

</script>

<input type="text" id="inp" style="width:500px;" onKeyUp="change()">


_________________
У каждого Гребенщикова есть свое "Все идет по плану"
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
roman koff



Репутация: +2   
Пол: <br />Пол:Муж
Откуда: Санкт-Петербург Сообщения: 373
Стаж: 2 года 10 месяцев
Сообщение01.12.2006 10:34 Ответить с цитатой

Спасибо за ценные рекомендации!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Mikelangelo



Репутация: 0    Сообщения: 145
Стаж: 3 года 4 месяца
Сообщение01.12.2006 10:46 Ответить с цитатой

Балин,сори,забыл на четность проверить
<script language="JavaScript">
function change()


{
var last= new String();
var lastinput=0;


if (window.event.keyCode==188)
{
last=document.getElementById('inp').value;
lastinput=last.lastIndexOf("<");
lastoutput=last.lastIndexOf(">");
//alert(lastinput+" "+lastoutput);

regexarray=last.split("<");
count=regexarray["length"]-1;
// alert(count);


if(lastinput>lastoutput & lastoutput!=-1 & count%2==0)
{
last=last.substring(1,last.length-1);
lastinput=last.lastIndexOf("<");
// alert(last);
tagname=last.substring(lastinput+1,lastoutput);
// alert(tagname);
document.getElementById('inp').value=document.getElementById('inp').value+"/"+tagname;
}
}
}

</script>

<TextArea id="inp" style="width:500px;height:400px;" onKeyUp="change()">


_________________
У каждого Гребенщикова есть свое "Все идет по плану"
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
roman koff



Репутация: +2   
Пол: <br />Пол:Муж
Откуда: Санкт-Петербург Сообщения: 373
Стаж: 2 года 10 месяцев
Сообщение01.12.2006 11:30 Ответить с цитатой

Чтото в этом конечно есть Подмигивает
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов FREESTUDENTS -> Архив Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы можете скачивать файлы


На главную •  RSS-лента •  PDA-версия
 
Powered by phpBB © 2001, 2007 phpBB Group
Hosted by INFOBOX