我使用这个插件来获取文本区域的插入符号位置。我有一个<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中获取插入符号位置的另一种方法。如果你愿意,你可以用它。
希望能有所帮助。