$(document).ready(function () {
$("#id").keydown(function () {
});
})
此代码完全适用于除日文文本之外的所有内容(数字,字母,符号等)。在按键时,它不会通过此事件。有人知道任何解决方案吗?
答案 0 :(得分:5)
你几乎无能为力。 “日文文本”是指IME,它是一种拦截键盘输入并帮助您将其转换为日文文本的软件。该软件如何与浏览器交互或与浏览器的Javascript引擎交互取决于操作系统,IME,浏览器和浏览器的Javascript引擎。在某些平台上,按键信号通过,而在其他平台上则不是。您可以尝试绑定其他事件,例如keyup
或keypress
,即使使用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 = ''
});
})