Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.07.2013, 02:37
Аватар для aquamarinn
Новичок на форуме
Отправить личное сообщение для aquamarinn Посмотреть профиль Найти все сообщения от aquamarinn
 
Регистрация: 04.07.2013
Сообщений: 4

Проблема с копированием текста в textarea
Подскажите, пожалуйста, в чем моя ошибка!

Есть код страницы с комментариями (привожу упрощенный вариант):
<div class="postbody">
<span class="name">ник 1</span>
<span class="comment">текст комментария 1</span>
<span class="quote">цитировать</span>
</div>

<div class="postbody">
<span class="name">ник 2</span>
<span class="comment">текст комментария 2</span>
<span class="quote">цитировать</span>
</div>

<div class="postbody">
<span class="name">ник 3</span>
<span class="comment">текст комментария 3</span>
<span class="quote">цитировать</span>
</div>
<br />
<textarea class="sceditor-container" style="width: 690px; height: 153px;" tabindex="0"></textarea>


Есть скрипт, который должен копировать выделенный текст, обрамлять в bb-код цитаты с ником цитируемого и вставлять в поле ответа:
$(document).ready(function(){

   $(".comment").mouseup(function(e){
      qtext = $(this).parents(".postbody");
      if (window.getSelection)
      {
         theSelection = window.getSelection().toString();
      }
      else if (document.getSelection)
      {
         theSelection = document.getSelection();
      }
         else if (document.selection)
      {
         theSelection = document.selection.createRange().text;
      }   
      if (theSelection)
      {
            $(".quote").click(function () { 
            uname = qtext.find(".name").text();
            $('.sceditor-container')[0].value += '[quote="' + uname + '"]' + theSelection + '[/quote]'
         });
      }
   });
});


Все работает, но происходит сбой: первый выделенный фрагмент вставляется один раз, второй — уже два раза, третий — три раза и т.д.


Что я упустил в скрипте?
Ответить с цитированием
  #2 (permalink)  
Старый 04.07.2013, 05:17
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Потому что при каждом событии mouseup ты вновь и вновь добавляешь обработчик события (один и тот же) click для .quote.
Ответить с цитированием
  #3 (permalink)  
Старый 04.07.2013, 17:51
Аватар для aquamarinn
Новичок на форуме
Отправить личное сообщение для aquamarinn Посмотреть профиль Найти все сообщения от aquamarinn
 
Регистрация: 04.07.2013
Сообщений: 4

Спасибо большое за информацию! А как это подправить? Через on / off?
Ответить с цитированием
  #4 (permalink)  
Старый 04.07.2013, 18:17
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Нет. Просто перенести обработчик клика за пределы обработчика mouseup
Ответить с цитированием
  #5 (permalink)  
Старый 04.07.2013, 21:44
Аватар для aquamarinn
Новичок на форуме
Отправить личное сообщение для aquamarinn Посмотреть профиль Найти все сообщения от aquamarinn
 
Регистрация: 04.07.2013
Сообщений: 4

Вынес. Дублироваться фрагмент перестал, но теперь и не обрабатывается :
$(document).ready(function(){

   $(".comment").mouseup(function(e){
      qtext = $(this).parents(".postbody");
      if (window.getSelection)
      {
         theSelection = window.getSelection().toString();
      }
      else if (document.getSelection)
      {
         theSelection = document.getSelection();
      }
         else if (document.selection)
      {
         theSelection = document.selection.createRange().text;
      });   

            $(".quote").click(function () { 
            uname = qtext.find(".name").text();
            $('.sceditor-container')[0].value += '[quote="' + uname + '"]' + theSelection + '[/quote]'
         });
   });
});


Вместо скопированного текста выдается false.
Ответить с цитированием
  #6 (permalink)  
Старый 04.07.2013, 21:51
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

А где объявлена переменная theSelection ?
Ответить с цитированием
  #7 (permalink)  
Старый 05.07.2013, 02:26
Аватар для aquamarinn
Новичок на форуме
Отправить личное сообщение для aquamarinn Посмотреть профиль Найти все сообщения от aquamarinn
 
Регистрация: 04.07.2013
Сообщений: 4

Все, заработал!
$(document).ready(function(){

   $(".comment").mouseup(function(e){
      qtext = $(this).parents("div.postbody");
      if (window.getSelection)
      {theSelection = window.getSelection().toString();}
      else if (document.getSelection)
      {theSelection = document.getSelection();}
       else if (document.selection)
      {theSelection = document.selection.createRange().text;}
      });   
            $(".quote").click(function () { 
            uname = qtext.find(".name").text();
            $('.sceditor-container')[0].value += '[quote="' + uname + '"]' + theSelection + '[/quote]'
            });

});

Спасибо большое за помощь!
Ответить с цитированием
  #8 (permalink)  
Старый 05.07.2013, 07:28
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Потому что нужно форматировать свой код:
$(document).ready(function(){
    $(".comment").mouseup(function(e){
      qtext = $(this).parents("div.postbody");
      if (window.getSelection)
        theSelection = window.getSelection().toString();
      else if (document.getSelection)
        theSelection = document.getSelection();
       else if (document.selection)
        theSelection = document.selection.createRange().text;
    });  
    $(".quote").click(function () {
      uname = qtext.find(".name").text();
      $('.sceditor-container')[0].value += '[quote="' + uname + '"]' + theSelection + '[/quote]'
    });
});

Так сразу становится видно где лишние скобки.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Установка каретки в конце текста textarea Dorian_bs Общие вопросы Javascript 2 27.01.2012 00:29
textarea сохранение форматирования текста shureg Общие вопросы Javascript 0 07.05.2011 21:21
Каретка в конце текста при фокусе textarea InetBUG Events/DOM/Window 0 05.12.2010 01:54
Подсчет "реальной" длины текста в textarea modernx Элементы интерфейса 22 06.06.2010 18:30
проблема с передачей русского текста в Prototype subaru Prototype & script.aculo.us 2 26.07.2007 16:56