javascript - jQuery val() 无法在 Chrome 中使用 Caret 逻辑

标签 javascript jquery google-chrome caret

我正在使用一个输入字段,我已经为其映射了键代码,这样键盘输入就会将不同的语言字符呈现到输入字段中。

当字符到达输入“view”的末尾时,使用 jQuery val() 方法的“映射”字符的任何额外输入都不会被解释为来自浏览器的键输入,因此保留最后一个输入的字符始终可见。

所以我必须添加插入符号逻辑(jsfiddle 中的底部输入使用插入符号逻辑)但这在 Chrome/(webkit?)上不起作用

这是我的示例的 jsfiddle。 http://jsfiddle.net/dwickwire/S9EKN/

编辑:我测试了以下版本,在 FF 中工作,但对我来说在 Chrome 中不工作

Mac 雪豹 OSX 10.6.7

Chrome:v 11.0.696.68、v 11.0.696.71 - 不工作

Firefox:4.0.1 - 有效

Windows Chrome:-v 不确定 - 不起作用

我不确定如何解决这个问题,有什么想法吗? 谢谢

最佳答案

如果您保存并添加到输入的 scrollLeft 位置,它将更新并保持输入的字符在 View 中。虽然,如果您在输入的中间单击并开始输入,它会失败。

我更新了第二个输入 demo使用下面的代码。另请注意,添加的输入和测试范围应具有相同的字体大小。

input_2.bind('keydown.keyboard', function(e) {
    var key = "",
        current_val = input_2.val(),
        pos = input_2.caret(),
        start_pos = pos.start,
        end_pos = pos.end,
        scroll = $(this).scrollLeft();

    // some mapped keys
    switch (e.which) {
        // e key
    case 69:
        key = "ε";
        e.preventDefault();
        break;
        // f key            
    case 70:
        key = "φ";
        e.preventDefault();
        break;
        // z key                
    case 90:
        key = "ζ";
        e.preventDefault();
        break;
        // a key
    case 65:
        key = "α";
        e.preventDefault();
        break;
    }

    if (key !== '') {
        var test = $('<span class="test">&nbsp;' + key + '</span>').appendTo('body');
        scroll += test.width();
        test.remove();
    }

    input_2.val(current_val + key);
    //Insert/Replace text at caret then restore caret        
    input_2.value = current_val.substr(0, start_pos) + key + current_val.substr(end_pos, current_val.length);
    input_2.caret(start_pos + key.length, start_pos + key.length);
    if (key !== '') {
        $(this).scrollLeft(scroll);
    }

});

更新:scrollLeft 位置似乎有点偏离,所以如果你在带有字符的范围内添加  ,效果会好得多 ( updated demo )

关于javascript - jQuery val() 无法在 Chrome 中使用 Caret 逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6143718/

相关文章:

javascript - 在 jQuery UI Autocomplete 中, `response` 函数是在哪里实现的?

javascript - 在 onclick 监听器 chrome 扩展中获取 contextMenu 标题

javascript - 谷歌分析集成

javascript - 如何将两个父节点连接到一个子节点以及如何务实地为树中的每个节点制作工具提示?在 D3 js (SVG) 中

javascript - 未捕获的类型错误 : Cannot call method 'toLowerCase' of undefined

javascript - 我如何单独获取 li 文本而不是内部 HTML

javascript - 使用 Chrome JavaScript 调试器/如何中断页面加载事件

CSS3 列基线

javascript - 使用 ng-repeat 创建一个 8x8 表

javascript - 如何将日期字符串解析为本地日期?