|
|
|
| Мне нужно вставить в текстовое поле некоторый текст. Понятно что это можно сделать так:
<script>
function add(str)
{
document.all.pole.value.=str;
}
....
<a onclick=add('строка')>вставка</a>
...
<textarea id=pole>Текст</textarea>
|
Но значение вставляется в конец поля. А мне надо чтобы вставлялось в позицию курсора.
Подскажите плиз как это сделать... | |
|
|
|
|
|
|
|
для: Axxil
(30.10.2004 в 15:59)
| | Хм... по ссылке есть решение для обрамления тэгами выделенного текста - может оно вам подойдёт?
http://www.softtime.ru/forum/read.php?id_forum=2&id_theme=376&page=1 | |
|
|
|
|
|
|
|
для: 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>
|
| |
|
|
|
|
|
|
|
для: elenaki
(30.10.2004 в 17:02)
| | >... ума не приложу :)
Вот и я о том же :))) | |
|
|
|
|
|
|
|
для: elenaki
(30.10.2004 в 17:02)
| | Этот код у меня не работает. Точнее работает но неправильно определяет позицию курсора. Он определяет одну позицию для всей строки. Причём не понятно по какому принципу.И ещё зачем в текстареа повторять тело функции? | |
|
|
|
|
|
|
|
для: cheops
(30.10.2004 в 16:57)
| | Это интересно! Но немного не то. Мне надо вставлять строку в текущую позицию курсора.
Определять позицию elenaki меня научила :)))(спасибо). Теперь дело за малым научиться вставлять строку... | |
|
|
|
|
|
|
|
для: 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 в 17:43)
| | http://web-support.ru/web-tech/java_game.shtml
посмотри вот здесь. это игра на Java-script. там определяется позиция курсора в текстовом поле и вставляет "ракетку" (два символа) | |
|
|
|
|
|
|
|
для: elenaki
(30.10.2004 в 17:43)
| | Хм... здорово - мне такое в голову не приходило :) Нужно будет где-нибудь использовать. | |
|
|
|
|
|
|
|
для: cheops
(30.10.2004 в 18:21)
| | А я чё-то ничего не понял. Если не сложно,плиз, можете указать конкретный кусок кода где искать. | |
|
|
|
|
|
|
|
для: 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
|
| |
|
|
|
|
|
|
|
для: elenaki
(30.10.2004 в 18:51)
| | А где определение текущей позиции курсора?
И здесь если я правильно понял текстареа каждый раз заново перерисовывается.
А мне надо вставлять строку в уже существующий в поле текст. | |
|
|
|
|
|
|
|
для: Axxil
(30.10.2004 в 19:08)
| | А сколько ресурсов жрет такой скрипт? | |
|
|
|