Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Проблема с копированием текста в textarea (https://javascript.ru/forum/jquery/39558-problema-s-kopirovaniem-teksta-v-textarea.html)

aquamarinn 04.07.2013 02:37

Проблема с копированием текста в 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]'
         });
      }
   });
});


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


Что я упустил в скрипте?

danik.js 04.07.2013 05:17

Потому что при каждом событии mouseup ты вновь и вновь добавляешь обработчик события (один и тот же) click для .quote.

aquamarinn 04.07.2013 17:51

Спасибо большое за информацию! А как это подправить? Через on / off?

danik.js 04.07.2013 18:17

Нет. Просто перенести обработчик клика за пределы обработчика mouseup

aquamarinn 04.07.2013 21:44

Вынес. Дублироваться фрагмент перестал, но теперь и не обрабатывается :
$(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.

danik.js 04.07.2013 21:51

А где объявлена переменная theSelection ?

aquamarinn 05.07.2013 02:26

Все, заработал!
$(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]'
            });

});

Спасибо большое за помощь!

danik.js 05.07.2013 07:28

Потому что нужно форматировать свой код:
$(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]'
    });
});

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


Часовой пояс GMT +3, время: 22:25.