【问题标题】:Getting caret position in IE works in one scenario, doesn't in another在 IE 中获取插入符号位置在一种情况下有效,在另一种情况下无效
【发布时间】:2011-12-12 07:25:18
【问题描述】:

我在 HTML 标记中有一个 input 元素,如下所示:

<input type="text" name="s" id="s" value="" />

我正在使用 jQuery 的 keypress 将在此输入元素中输入的字符更改为乌尔都语字符(如迷你虚拟键盘):

$("#s").keypress(function(e) {
    var pos = getCaretPos('s');
    // key-mapping logic here
});

我还有一些按钮可以帮助用户通过单击相应的按钮来输入他们想要的乌尔都语字符。因此:

// Process clicks on buttons with class=kb-letter
$(".kb-letter").click(function() {
    var pos = getCaretPos('s');
    // logic for entering Urdu characters in 's' here
});

这是获取插入符号位置的函数。它返回s 中的当前插入符号位置,然后在该位置插入新字符:

function getCaretPos(areaId) {
    var txtArea = document.getElementById(areaId);
    var pos = 0;
    var br = (document.selection ? "ie" : ((txtArea.selectionStart || txtArea.selectionStart == '0') ? "ff" : false ) );
    if (br == "ie") { 
        txtArea.focus();
        var range = document.selection.createRange();
        range.moveStart ('character', -txtArea.value.length);
        pos = range.text.length;
    }
    else if (br == "ff") {
        pos = txtArea.selectionStart;
    }

    return pos;
}

现在,上面的getCaretPos() 在 Firefox 8 和 Chrome 17 中可以正常工作,既可以在s 中直接键盘输入,也可以通过单击按钮进行输入;但在 Internet Explorer 8 上,它适用于直接键盘输入。如果我尝试使用鼠标单击输入一个字符,它会在位置 0 输入,因为 getCaretPos() 在这种情况下总是返回 0。

我不知道出了什么问题。我是否需要以不同的方式调用getCaretPos() 来响应 IE 的鼠标点击?

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    没关系。我使用了一个无序列表,它的&lt;li&gt;s 冒充键盘按钮。出于某种原因,IE 遇到了问题。我将&lt;li&gt;s 换成了&lt;button&gt;s,现在getCaretPos() 工作正常。

    【讨论】:

      猜你喜欢
      • 2017-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-17
      相关资源
      最近更新 更多