$(document).ready(function () {
$("#id").keydown(function () {
});
})
此代码完美适用于除日语文本之外的所有内容(数字、字母、符号等)。在按键时它不会通过这个事件。有人知道任何解决方案吗?
$(document).ready(function () {
$("#id").keydown(function () {
});
})
此代码完美适用于除日语文本之外的所有内容(数字、字母、符号等)。在按键时它不会通过这个事件。有人知道任何解决方案吗?
你几乎无能为力。“日语文本”是指输入法,它是一种截取键盘输入并帮助您将其转换为日语文本的软件。该软件如何与浏览器和浏览器的 Javascript 引擎交互或不交互取决于操作系统、IME、浏览器和浏览器的 Javascript 引擎。在某些平台上,按键是通过信号发出的,而在其他平台上则不是。您可以尝试绑定到其他事件,例如keyup
or keypress
,即使使用 IME 也可能会发出一些信号。
您可以做的最好的事情是确保您不依赖按键事件,并且如果您无法拦截它们,则可以使用后备选项;例如,也绑定到change
文本字段上的事件并处理整个文本更改,这将在 IME 输入结束时触发。
我遇到了同样的问题,我没有阻止用户输入文本,而是将输入值设置为 null,因为 api event.preventDefault();
无法正常工作。
$(document).ready(function () {
$("#id").keyup(function () {
this.value = ''
});
})
我有同样的问题,我使用输入事件解决了它。
//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);