|
|
|
| Вот. захотелось сделать "красиво": пользователь в форуме выделяет кусок текста, нажимает кнопку и выделенное появляется в форме быстрого ответа. Сам придумать не смог:(, попытался подогнать готовое. Получилось:
<script language="javascript">
function addtext(txt)
{
if (txt != undefined)
document.quick.message.value += txt;
return false;
}
function selector() {
if (document.getSelection) {
var str = document.getSelection();
document.quick.message.value = str;
}
if (document.selection) {
var str = document.selection.createRange();
document.quick.message.value += str.text;
}
}
</script>
<a href="javascript:;" onClick=selector()>
Быстрая цитата</a>
<form name="quick" action="..." metod=post>
<textarea cols=60 rows=6 name="message"></textarea>
<br>
<input type=submit value="Отправить">
</form>
|
Итог неутешителен - работает только под ИЕ. Как бы с остальными это все подружить? | |
|
|
|
|
|
|
|
|
для: 12345
(01.02.2006 в 19:39)
| | =) Вы, случаем, на phpclub'е не обитаете? =)
Тут, видимо не в Range дело. Вот скрипт-первоисточник, прекрасно работающий и под Оперу:
<SCRIPT language=JavaScript>
function selector() {
if (document.getSelection) {
var str = document.getSelection();
document.myForm.myArea.value = str;
}
if (document.selection) {
var str = document.selection.createRange();
document.myForm.myArea.value = str.text;
}
}
if (window.Event) {
document.captureEvents(Event.MOUSEUP);
}
document.onmouseup = selector;
</SCRIPT>
<FORM name=myForm>
<TEXTAREA cols=40 name=myArea rows=10></TEXTAREA>
</FORM>
|
Как видите, поменял только имена формы и поля, и повесил на другое событие. по идее. все нормаьлно, но - увы. | |
|
|
|
|
|
|
|
для: Киналь
(01.02.2006 в 20:16)
| | Действительно, getSelection :)
так в чём же проблема, если пример есть? 2-3 несложных эксперимента - и разбираемся, в чём дело. В Опере (7.54) 1-й код не работал. Разница - только в отсутствии события. Быстро приходим к выводу, что в Опере этот метод существует только в течение существования события onmouseup . Делаем:
<script>
str1=0; //просто напроминание, что это глобальная переменная
function selector0() {
if(self.opera)str1=document.getSelection();
}
function selector() {
if (document.getSelection) {
if(self.opera)var str = str1;
else var str = document.getSelection();
document.quick.message.value = str;
}
if (document.selection) {
var str = document.selection.createRange();
document.quick.message.value += str.text;
}
}
document.onmouseup = selector0;
</script>
<a href=# onmousedown=selector(); onclick=return!1;>
Быстрая цитата</a>
<form name="quick" action="..." metod=post>
<textarea cols=60 rows=6 name="message"></textarea>
<br>
<input type=submit value="Отправить">
</form>
|
Убирая мусор из примера:
<B>Демонстрация быстрой цитаты. Выделить некий текст, затем - клик по ссылке.</B><br><br>
<script>
str=''; //просто напроминание, что это глобальная переменная
function selector0() {
if(self.opera)str=document.getSelection();
}
document.onmouseup = selector0;
function selector() {
if(document.getSelection)document.getElementById('message').value = self.opera?str:getSelection();
if(document.selection)document.all.message.value += document.selection.createRange().text;
}
</script>
<a href=# onmousedown=selector(); onclick=return!1;>Быстрая цитата</a><br>
<textarea cols=60 rows=6 id=message></textarea>
|
| |
|
|
|
|
|
|
|
для: 12345
(01.02.2006 в 21:13)
| | Мда... Большое спасибо вам.
Все-таки при всех плюсах и рабостях JS никак не могу к нему приноровиться: сколько браузеров, столько яваскриптов... | |
|
|
|
|
|
|
|
для: Киналь
(02.02.2006 в 11:14)
| | Да чтоб он сгорел!! =)
str='';
function selector0() {
if(self.opera)str=document.getSelection();
}
document.onmouseup = selector0;
function selector() {
if(document.getSelection)
document.quick.message.value += '[QUOTE] ' + self.opera?str:getSelection() + ' [/QUOTE]';
if(document.selection)
document.all.message.value += '[QUOTE] ' + document.selection.createRange().text + ' [/QUOTE]';
}
|
выделенный текст добавляет как надо, а bb-code - нет! Опять-таки, в ИЕ все как часы. | |
|
|
|
|
|
|
|
для: Киналь
(02.02.2006 в 12:53)
| | Оператор (?:) имеет меньший приоритет, чем "+" | |
|
|
|
|
|
|
|
для: 12345
(02.02.2006 в 13:01)
| | Еще раз спасибо=) Проблема решилась выносом этого самого оператора в переменную. | |
|
|
|