【问题标题】:Changing input value更改输入值
【发布时间】:2015-01-27 13:55:36
【问题描述】:

主要问题是,即使使用拉丁键盘,我也想在输入中输入格鲁吉亚字符。我的代码是这样工作的:在 keydown 上,它获取按下的键的字符,然后找到它的格鲁吉亚语等价物,并将字符添加到字段中的值。代码工作正常,但是当涉及到输入的边缘时,字符串没有移动,我看不到更新的值。我试图专注于 keyup 的输入,但这无济于事(因为它已经集中了);您有任何解决方法的想法吗?提前感谢您的帮助。

  var aaa = {};
  aaa["a"] = "0x10d0";


  aaa["b"] = "0x10d1";
  aaa["g"] = "0x10d2";
  aaa["d"] = "0x10d3";
  aaa["e"] = "0x10d4";
  aaa["v"] = "0x10d5";
  aaa["z"] = "0x10d6";

  aaa["T"] = "0x10d7"; // t
  aaa["i"] = "0x10d8";
  aaa["k"] = "0x10d9";
  aaa["l"] = "0x10da";
  aaa["m"] = "0x10db";
  aaa["n"] = "0x10dc";
  aaa["o"] = "0x10dd";
  aaa["p"] = "0x10de";
  aaa["J"] = "0x10df"; // zh
  aaa["r"] = "0x10e0";
  aaa["s"] = "0x10e1";
  aaa["t"] = "0x10e2"; // t

  aaa["u"] = "0x10e3";
  aaa["f"] = "0x10e4"; 
  aaa["q"] = "0x10e5";
  aaa["R"] = "0x10e6"; // gh/g
  aaa["y"] = "0x10e7";
  aaa["S"] = "0x10e8"; // sh
  aaa["C"] = "0x10e9"; // ch
  aaa["c"] = "0x10ea"; // ts
  aaa["Z"] = "0x10eb"; // dz
  aaa["w"] = "0x10ec"; // ts
  aaa["W"] = "0x10ed"; // ch/tch
  aaa["x"] = "0x10ee"; // kh
  aaa["j"] = "0x10ef";
  aaa["h"] = "0x10f0";

  var aab = {};
  for (var key in aaa) {
    aab[aaa[key]]=key;
  }

  window.onload = function() {
    var tbox_lemma = document.getElementById("tbox_lemma");
    tbox_lemma.onkeypress = function(e) {
      e = e || window.event;
      var keycode = e.charCode || e.keyCode;
      var c = String.fromCharCode(keycode);
      if( c in aaa ) {
        var txtToAdd = String.fromCharCode(aaa[String.fromCharCode(keycode)]);
        var caretPos1 = tbox_lemma.selectionStart;
        var caretPos2 = tbox_lemma.selectionEnd;
        var val = tbox_lemma.value;
        tbox_lemma.value = val.substring(0, caretPos1) + txtToAdd + val.substring(caretPos2);
        tbox_lemma.selectionStart = caretPos1 + 1;
        tbox_lemma.selectionEnd = tbox_lemma.selectionStart;
        return false;
      }
    };
  };

这里是它的一个小提琴:http://jsfiddle.net/4dczfknx/

问题出在 Chrome 上。在 Firefox 上运行良好。

【问题讨论】:

    标签: javascript jquery input key key-bindings


    【解决方案1】:

    由于您使用 jQuery 标记了您的问题,请将此行添加到 onload 函数的末尾:

    $('#tbox_lemma').blur().focus().val($('#tbox_lemma').val());
    

    JSFiddle demo

    【讨论】:

    • 现在的问题是它在Firefox中不起作用:(
    • 在 Internet Explorer 上都没有
    • Works 为我在 Chrome 版本 39.0.2171.99 m | 适用于 Firefox 版本 34.0.5 | 适用于 Internet Explorer 版本 10.0.9200.17028 - Windows 8 Enterprise
    • 我不知道,在我的 mac 上它不起作用。在寻找可能的解决方案时,我发现 firefox 可能会使用一种策略,即在一次 blur() 或 focus() 之后,它们不再执行任何此类函数,以避免一些循环。所以我现在尝试创建一个不透明度为 0 的输入,然后: hiddenInput.focus(); setTimeout(function(){ searchInput.focus(); },1);无论如何,在所有浏览器上都可以正常工作,谢谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 2021-11-30
    • 2014-05-29
    • 1970-01-01
    • 2015-02-13
    • 2019-10-19
    • 2018-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多