2

このプラグインを使用してテキストエリアのキャレット位置を取得しています。を<div>クリックすると<ul>、スマイリー付きリストが表示され、そのうちの1つがテキストエリアに配置されます。をクリックすると、テキストエリア<div>でイベントが発生します。blurぼかしのキャレット位置を保存します。

oRoot.blur(function() {
    caret_pos = $(this).caret();
});

ユーザーがスマイリーをクリックした後、フォーカスを失う前にキャレットがあったテキストエリアに配置しました。

oList
    .delegate('.chat-smile', 'click', function() {
        var oRoot = $(this).parent().data('oRoot');

        if (is_default_value(oRoot)) oRoot.val('');

        oRoot.val(oRoot.caret(caret_pos).caret().replace($(this).attr('smilie-code')));

        toggle_list($(this).parent());
    });

問題は、IE では textarea にフォーカスがない場合にプラグインが機能しないように見え、IE ではblurフォーカスが失われた後にイベント ハンドラーが起動されることです。

これを回避するアイデアはありますか?キャレット位置をclickkeyupfocusIE 用に保存することを考えていました。

4

2 に答える 2

1

以前に考えた回避策を試しました(クリック、キーアップ、IEのフォーカス時にキャレットの位置を保存します)。イベントをバインドしてキャレット位置を保存する関数は次のようになります。

function bind_save_caret_pos() {
    var event_to_bind = $.browser.msie ? 'keyup mouseup' : 'blur';

    oRoot.bind(event_to_bind, function() {
        caret_pos = $(this).caret();
    });
}

keyup入力、削除、矢印によるテキストの移動などを扱います。

mouseupテキストのピースの選択、カーソルの移動などを扱います。

于 2013-05-22T15:36:19.323 に答える
0

IE でキャレットの位置を取得する別の方法を次に示します必要に応じて使用できます。

それが役に立てば幸い。

于 2013-05-21T14:35:03.947 に答える