0

はい、古い投稿がありましたが、ほぼ同じ質問ですが、@ Tim Downsコードを使用する代わりに、時間をかけて自分でこれを書いたとき、思ったよりも近づきました。今の唯一の問題は、ボタンをクリックするたびに別のピースが追加されることです。自分でビンに行って試してみるのが最善の方法です。

http://jsbin.com/ogiyed/1/edit

コードはここにあります:

function getSelected() {
     if(window.getSelection) { return window.getSelection(); }
    else if(document.getSelection) { return document.getSelection(); }
                else {
                        var selection = document.selection && document.selection.createRange();
                        if(selection.text) { return selection.text; }
            return false;
        }
        return false;
    }

$('.selections').not('.username').mouseup(function(e) {
var uid = $('.selections').find('.username').text();
var selection = getSelected();
if(selection) {
$('button').click(function() {
var text = $('#textarea_content');
text.val(text.val()+'[quote="'+ uid +'"]'+ selection +'[/quote]');
});
}
});

それはほとんど魅力のように機能します;)

4

1 に答える 1

1

マウスアップ ハンドラー内にクリック ハンドラーを割り当てているため、マウスアップのたびに追加のクリック ハンドラーが追加され、そのすべてがボタン クリックごとに実行されます。

既存のクリック ハンドラーを再定義する必要がある場合は、最初に以前のものを削除して.off('click')から、新しいものを割り当てます。

$('button').off('click').click(function() {
   var text = $('#textarea_content');
   text.val(text.val()+'[quote="'+ uid +'"]'+ selection +'[/quote]');
});

更新されたデモ: http://jsbin.com/ogiyed/4/

(余談ですが、コードをインデントしてください!)

于 2013-03-07T20:17:41.680 に答える