Проблема с копированием текста в 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:44. |