$(document).ready(function () {
$("#id").keydown(function () {
});
})
このコードは、日本語のテキストを除くすべて (数字、アルファベット、記号など) に対して完全に機能します。キーを押しても、このイベントは通過しません。誰かが解決策を知っていますか?
$(document).ready(function () {
$("#id").keydown(function () {
});
})
このコードは、日本語のテキストを除くすべて (数字、アルファベット、記号など) に対して完全に機能します。キーを押しても、このイベントは通過しません。誰かが解決策を知っていますか?
あなたができることはほとんどありません。「日本語テキスト」とは、キーボード入力をインターセプトし、それを日本語テキストに変換するのに役立つソフトウェアである IME を意味します。このソフトウェアがブラウザおよびブラウザの Javascript エンジンとどのように相互作用するか、または相互作用しないかは、OS、IME、ブラウザ、およびブラウザの Javascript エンジンによって異なります。一部のプラットフォームではキー押下が通知されますが、他のプラットフォームでは通知されません。keyup
または などの他のイベントへのバインドを試すことができkeypress
ます。IME を使用している場合でも、シグナルが送信される場合があります。
あなたができる最善のことは、キープレスイベントに依存していないことを確認し、それらを傍受できない場合はフォールバックオプションを用意することです. たとえば、テキスト フィールドのイベントにもバインドし、IME 入力の最後にトリガーさchange
れるテキスト全体の変更を処理します。
同じ問題があり、入力イベントを使用して解決しました。
//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);