日语文本的Keypress事件

时间:2013-04-16 05:33:58

标签: javascript jquery

$(document).ready(function () {
    $("#id").keydown(function () {

    });
})

此代码完全适用于除日文文本之外的所有内容(数字,字母,符号等)。在按键时,它不会通过此事件。有人知道任何解决方案吗?

3 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:0)

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

//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);

答案 2 :(得分:0)

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

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