【问题标题】:Keypress event for Japanese text日语文本的按键事件
【发布时间】:2013-04-16 05:33:58
【问题描述】:
$(document).ready(function () {
    $("#id").keydown(function () {

    });
})

此代码完美适用于除日语文本之外的所有内容(数字、字母、符号等)。在按键时它不会通过这个事件。有人知道解决办法吗?

【问题讨论】:

  • “日文文本”是什么意思?日文键盘布局/输入法?
  • 解决方案是使用JavaScript在网页中编写自己的IME。这并不容易,但实际上非常可行。
  • @SethJeremiMalaki 是的
  • @Pacerier 我不建议这样做。首先,工作量很大。其次,用户已经习惯了他们操作系统的 IME 并且可能已经对其进行了定制,改变这种行为是糟糕的用户体验。第三,当操作系统 IME 拦截按键时,您将如何使用浏览器内的 IME 替换操作系统的 IME?
  • 电脑不懂日语

标签: javascript jquery


【解决方案1】:

你几乎无能为力。 “日语文本”是指输入法,它是一种截取键盘输入并帮助您将其转换为日语文本的软件。该软件如何与浏览器和浏览器的 Javascript 引擎交互或不交互取决于操作系统、IME、浏览器和浏览器的 Javascript 引擎。在某些平台上,按键是通过信号发出的,而在其他平台上则不是。您可以尝试绑定到其他事件,例如 keyupkeypress,即使使用 IME 也可能会发出一些信号。

您可以做的最好的事情是确保您不依赖按键事件,并且如果您无法拦截它们,则可以使用后备选项;例如绑定到文本字段上的change 事件并处理整个文本更改,在 IME 输入结束时触发。

【讨论】:

  • 这意味着日文文本无法使用按键向上或向下事件?
  • @sujal 没办法保证你可以用,是的。
  • @sujal,如果您真的需要,您可以随时在网页中中构建自己的IME。如今的 JavaScript 能够做到这一点。
  • @deceze 这个是什么意思你可以尝试绑定到其他事件,比如 keyup 或 keypress,即使使用 IME 也可能会发出信号。您可以做的最好的事情是确保您不依赖按键事件,并且如果您无法拦截它们,则可以使用后备选项;例如绑定到文本字段上的更改事件并处理整个文本更改,这将在 IME 输入结束时触发。?因为我在这里也有问题stackoverflow.com/questions/49937171/…。谢谢
  • @sujal 您是如何解决问题的?我在这里遇到同样的问题stackoverflow.com/questions/49937171/…
【解决方案2】:

我遇到了同样的问题,我没有阻止用户输入文本,而是将输入值设置为 null,因为 api event.preventDefault(); 无法正常工作。

$(document).ready(function () {
    $("#id").keyup(function () {
        this.value = ''
    });
})

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,我使用输入事件解决了它。

    //calculate the length of a character
    function getLen(str){
        var result = 0;
        for(var i=0;i<str.length;i++){
          var chr = str.charCodeAt(i);
          if((chr >= 0x00 && chr < 0x81) ||
             (chr === 0xf8f0) ||
             (chr >= 0xff61 && chr < 0xffa0) ||
             (chr >= 0xf8f1 && chr < 0xf8f4)){
            //half width counted as 1
            result += 1;
          }else{
            //full width counted as 2
            result += 2;
          }
        }
        return result;
    };
    
    // trim the string by processing character by character
    function getTrimmedString(theString, maxLength){
    var tempLength = 0;
    var trimmedString = "";
    for (var i = 0; i < theString.length; i++) {
        tempLength = getLen(theString.charAt(i)) + tempLength;
        if(tempLength > maxLength){
            break;
        }else{
            trimmedString = trimmedString + theString.charAt(i);
        }
    }
    return trimmedString;
    }
    
    // limit the size of a field
    function limitCity(){
    var maxChars = 30;
    var cityVal = $("#city").val();
    var cityLength = getLen(cityVal);
    if (cityLength >= maxChars) {
        var trimmedString = getTrimmedString(cityVal, maxChars);
        $("#city").val(trimmedString);
    }
    }
    
    //bind the input event 
    $("#city").bind("input", limitCity);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多