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

    });
})

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

4

3 回答 3

6

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

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

于 2013-04-16T05:38:52.790 回答
0

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

$(document).ready(function () {
    $("#id").keyup(function () {
        this.value = ''
    });
})
于 2021-06-10T08:30:00.730 回答
-1

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

//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);
于 2018-12-07T02:49:25.200 回答