在IE中使用jQuery插入符号插件在文本区域中插入符号的位置

Caret position in textarea in IE using jQuery caret plugin

本文关键字:符号 插入 区域 位置 文本 IE jQuery 插件      更新时间:2023-09-26

我使用这个插件来获取文本区域的插入符号位置。我有一个<div>,点击它会显示带有微笑列表的<ul>,将其中一个放入文本区。点击<div>触发文本区域的blur事件。我将插入符号的位置保存为blur:

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

在用户点击smilie之后,我把它放在插入符号失去焦点之前的文本区域:

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中,似乎插件不工作,如果文本区没有焦点,并在IE的blur事件处理程序是在焦点丢失后被触发。

有什么办法解决这个问题吗?我正在考虑保存click, keyup, focus的插入符号位置为IE..

我已经尝试了我之前想到的解决方案(保存插入符号位置在点击,上键,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处理选择文本和平,移动光标等

这是在IE中获取插入符号位置的另一种方法。如果你愿意,你可以用它。

希望能有所帮助。