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

HTML+CSS+JavaScript

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

 

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

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

тема: Скрипт "быстрой цитаты"
 
 автор: Киналь   (01.02.2006 в 19:10)   письмо автору
 
 

Вот. захотелось сделать "красиво": пользователь в форуме выделяет кусок текста, нажимает кнопку и выделенное появляется в форме быстрого ответа. Сам придумать не смог:(, попытался подогнать готовое. Получилось:

<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)   письмо автору
 
   для: Киналь   (01.02.2006 в 19:10)
 

Range
http://www.softtime.ru/forum/read.php?id_forum=4&id_theme=11771&page=1
http://forum.vingrad.ru/index.php?showtopic=35775

   
 
 автор: Киналь   (01.02.2006 в 20:16)   письмо автору
 
   для: 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>


Как видите, поменял только имена формы и поля, и повесил на другое событие. по идее. все нормаьлно, но - увы.

   
 
 автор: 12345   (01.02.2006 в 21:13)   письмо автору
 
   для: Киналь   (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>

   
 
 автор: Киналь   (02.02.2006 в 11:14)   письмо автору
 
   для: 12345   (01.02.2006 в 21:13)
 

Мда... Большое спасибо вам.
Все-таки при всех плюсах и рабостях JS никак не могу к нему приноровиться: сколько браузеров, столько яваскриптов...

   
 
 автор: Киналь   (02.02.2006 в 12:53)   письмо автору
 
   для: Киналь   (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 - нет! Опять-таки, в ИЕ все как часы.

   
 
 автор: 12345   (02.02.2006 в 13:01)   письмо автору
 
   для: Киналь   (02.02.2006 в 12:53)
 

Оператор (?:) имеет меньший приоритет, чем "+"

   
 
 автор: Киналь   (02.02.2006 в 13:12)   письмо автору
 
   для: 12345   (02.02.2006 в 13:01)
 

Еще раз спасибо=) Проблема решилась выносом этого самого оператора в переменную.

   
Rambler's Top100
вверх

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