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

    });
})

このコードは、日本語のテキストを除くすべて (数字、アルファベット、記号など) に対して完全に機能します。キーを押しても、このイベントは通過しません。誰かが解決策を知っていますか?

4

3 に答える 3

6

あなたができることはほとんどありません。「日本語テキスト」とは、キーボード入力をインターセプトし、それを日本語テキストに変換するのに役立つソフトウェアである IME を意味します。このソフトウェアがブラウザおよびブラウザの Javascript エンジンとどのように相互作用するか、または相互作用しないかは、OS、IME、ブラウザ、およびブラウザの Javascript エンジンによって異なります。一部のプラットフォームではキー押下が通知されますが、他のプラットフォームでは通知されません。keyupまたは などの他のイベントへのバインドを試すことができkeypressます。IME を使用している場合でも、シグナルが送信される場合があります。

あなたができる最善のことは、キープレスイベントに依存していないことを確認し、それらを傍受できない場合はフォールバックオプションを用意することです. たとえば、テキスト フィールドのイベントにもバインドし、IME 入力の最後にトリガーchangeれるテキスト全体の変更を処理します。

于 2013-04-16T05:38:52.790 に答える
-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 に答える