Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Динамическая вставка в текстовое поле.
 
 автор: Axxil   (30.10.2004 в 15:59)   письмо автору
 
 

Мне нужно вставить в текстовое поле некоторый текст. Понятно что это можно сделать так:
<script> 
function add(str)
{
 document.all.pole.value.=str;
}
....
<a onclick=add('строка')>вставка</a>
...
<textarea id=pole>Текст</textarea>

Но значение вставляется в конец поля. А мне надо чтобы вставлялось в позицию курсора.
Подскажите плиз как это сделать...

   
 
 автор: cheops   (30.10.2004 в 16:57)   письмо автору
 
   для: Axxil   (30.10.2004 в 15:59)
 

Хм... по ссылке есть решение для обрамления тэгами выделенного текста - может оно вам подойдёт?

http://www.softtime.ru/forum/read.php?id_forum=2&id_theme=376&page=1

   
 
 автор: elenaki   (30.10.2004 в 17:02)   письмо автору
 
   для: cheops   (30.10.2004 в 16:57)
 

я нашла, как определить позицию курсора (№ символа) в текстареа.
но как именно в эту позицию вставить текст, ума не приложу :)
щелкни на любом символе и узнаешь его номер



<html>
<head>
<script>
function getCursorPos(textElement) {
var sOldText = textElement.value;
var objRange = document.selection.createRange();
var sOldRange = objRange.text;
var sWeirdString = '#%~';
objRange.text = sOldRange + sWeirdString; objRange.moveStart('character', (0 - sOldRange.length - sWeirdString.length));
var sNewText = textElement.value;
objRange.text = sOldRange;
for (i=0; i <= sNewText.length; i++) {
var sTemp = sNewText.substring(i, i + sWeirdString.length);
if (sTemp == sWeirdString) {
var cursorPos = (i - sOldRange.length);
return cursorPos;
}
}
}
</script>
</head>
<body>
<textarea id = "text1" onclick = "alert(getCursorPos(this))" style="width:200;height:300">
function getCursorPos(textElement) {
var sOldText = textElement.value;
var objRange = document.selection.createRange();
var sOldRange = objRange.text;
var sWeirdString = '#%~';
objRange.text = sOldRange + sWeirdString; objRange.moveStart('character', (0 - sOldRange.length - sWeirdString.length));
var sNewText = textElement.value;
objRange.text = sOldRange;
for (i=0; i <= sNewText.length; i++) {
var sTemp = sNewText.substring(i, i + sWeirdString.length);
if (sTemp == sWeirdString) {
var cursorPos = (i - sOldRange.length);
return cursorPos;
}
}
}
</textarea>
</body>
</html>


   
 
 автор: Axxil   (30.10.2004 в 17:18)   письмо автору
 
   для: elenaki   (30.10.2004 в 17:02)
 

>... ума не приложу :)
Вот и я о том же :)))

   
 
 автор: Axxil   (30.10.2004 в 18:45)   письмо автору
 
   для: elenaki   (30.10.2004 в 17:02)
 

Этот код у меня не работает. Точнее работает но неправильно определяет позицию курсора. Он определяет одну позицию для всей строки. Причём не понятно по какому принципу.И ещё зачем в текстареа повторять тело функции?

   
 
 автор: Axxil   (30.10.2004 в 17:34)   письмо автору
 
   для: cheops   (30.10.2004 в 16:57)
 

Это интересно! Но немного не то. Мне надо вставлять строку в текущую позицию курсора.
Определять позицию elenaki меня научила :)))(спасибо). Теперь дело за малым научиться вставлять строку...

   
 
 автор: elenaki   (30.10.2004 в 17:43)   письмо автору
 
   для: Axxil   (30.10.2004 в 17:34)
 

а если перебирать содержимое текстареа, пока не встретится символ, на котором стоит курсор (номер мы определили), прервать цикл и прибавить новый текст, а потом прицепить остальную строку?

Следующий пример демострирует цикл while, содержащий оператор continue, который выполняется, когда переменная i равна 3. 

i = 0 
n = 0
  while (i<5) { 
    I ++, if (i == 3) 
    continue n + = i
  } 

   
 
 автор: elenaki   (30.10.2004 в 18:14)   письмо автору
 
   для: elenaki   (30.10.2004 в 17:43)
 

http://web-support.ru/web-tech/java_game.shtml

посмотри вот здесь. это игра на Java-script. там определяется позиция курсора в текстовом поле и вставляет "ракетку" (два символа)

   
 
 автор: cheops   (30.10.2004 в 18:21)   письмо автору
 
   для: elenaki   (30.10.2004 в 17:43)
 

Хм... здорово - мне такое в голову не приходило :) Нужно будет где-нибудь использовать.

   
 
 автор: Axxil   (30.10.2004 в 18:42)   письмо автору
 
   для: cheops   (30.10.2004 в 18:21)
 

А я чё-то ничего не понял. Если не сложно,плиз, можете указать конкретный кусок кода где искать.

   
 
 автор: elenaki   (30.10.2004 в 18:51)   письмо автору
 
   для: Axxil   (30.10.2004 в 18:42)
 

ну вот же:

приступим к основным функциям, первая из которых - definefield. Сначала давай прикинем, как она должна выглядеть в общих чертах.

Результатом ее работы будет строка длинною в 600 символов (TEXAREA я предлагаю задать 30х20), которая затем будет записана в наше основное текстовое поле. Поскольку последняя строка, содержащая "ракетку", не вполне обычна, логичным решением будет разбить функцию на два блока: первый отвечает за наполнение первых 570 значений (19 строк), а второй - только за последнюю строку. Таким образом, для первых 19 строк: если значения переменных "мячика" и поля по X и Y совпадают, то пишем "o" (это наш мячик), иначе - "." (точку, т.е. ничего нет). Для последней строки: если совпали координата X строки и переменная положения ракетки racketpos, то пишем "==" (ракетку), иначе - ".." (две точки - наш стандартный наполнитель поля). В конце функции необходимо осуществить вывод нашей переменной printscreen.

Вот как все это реализуется на практике:

Шаг 5: Функция definefield:

function definefield(){ // Объявляем саму функцию и в который раз без аргументов

printscreen=""; // Обнуляем переменную, отвечающую за прорисовку поля

fieldx=fieldy=1; // Начинаем поиск мячика с левого верхнего угла поля

// Блок 1: 

while (fieldy<20){ // Для каждой строки по 19-ю включительно:

for (fieldx=1; fieldx<31; fieldx++){ // Для каждого элемента строки сравниваем:

if (objectx==fieldx && objecty==fieldy) printscreen+="o"; 

// Если совпали координаты, то на этом месте - мячик

else printscreen+="."; // Иначе - пусто

} // Конец цикла for - вся строка просмотрена в поисках мячика

fieldy++; // Берем следующую строку и все сначала, пока не исчерпаем все 19 строк

} // Конец цикла while - все 19 строк пройдены

// Блок 2 для последней 20-ой строки: 

for (fieldx=1; fieldx<16; fieldx++){ // Для каждого второго элемента (Всего 15 позиций!)

if (racketpos==fieldx) printscreen+="=="; // Если совпали, значит рисуем ракетку

else printscreen+=".."; // Иначе - пусто 

} // Конец цикла for - где-то нарисовали ракетку


battleForm.battleTA.value=printscreen; // Рисуем наше поле в TEXTAREA

} // Конец функции definefield

   
 
 автор: Axxil   (30.10.2004 в 19:08)   письмо автору
 
   для: elenaki   (30.10.2004 в 18:51)
 

А где определение текущей позиции курсора?
И здесь если я правильно понял текстареа каждый раз заново перерисовывается.
А мне надо вставлять строку в уже существующий в поле текст.

   
 
 автор: naught   (05.11.2004 в 01:50)   письмо автору
 
   для: Axxil   (30.10.2004 в 19:08)
 

А сколько ресурсов жрет такой скрипт?

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования