Проблема с копированием текста в 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]' }); } }); }); Все работает, но происходит сбой: первый выделенный фрагмент вставляется один раз, второй — уже два раза, третий — три раза и т.д. ![]() Что я упустил в скрипте? |
Потому что при каждом событии mouseup ты вновь и вновь добавляешь обработчик события (один и тот же) click для .quote.
|
Спасибо большое за информацию! А как это подправить? Через on / off?
|
Нет. Просто перенести обработчик клика за пределы обработчика mouseup
|
Вынес. Дублироваться фрагмент перестал, но теперь и не обрабатывается :
$(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. |
А где объявлена переменная theSelection ?
|
Все, заработал!
$(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]' }); }); Спасибо большое за помощь! |
Потому что нужно форматировать свой код:
$(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. |