3

このスクリプトに問題があります。入力フィールドに入力されたものを、リアルタイムで特定の文字に置き換えたいと考えてHello Worldいます。

 <input id="inputID" type="text" value="" maxlength="11"/>
 $('#inputID').keyup(function(e){
  var cv=["h","e","l","l","o"," ","w","o","r","l","d",""];

  var i=$('#inputID').val();

  for (j=0;j<11;j++){

    this.value = this.value.replace(i[j],cv[j]);

}

});

このスクリプトは、ゆっくり書くときはうまく機能しますが、速く書くときはうまくいきません。ご協力いただきありがとうございます

4

4 に答える 4

3

この方法を試してください

$('#inputID').keyup(function(e){
     var cv = 'hello world';
     this.value = cv.substr(0, this.value.length);
});

実際のデモをご覧ください。

于 2013-05-20T00:57:04.907 に答える
1

xdazzの解決策は正しいです(彼は私を打ち負かしました)

jQuery にまったく依存しないソリューションを示すことには利点があるのではないかと考えたので、jQuery に依存したくないユーザーも利益を得ることができます。

 document.getElementById('inputID').onkeyup = function () {
     var cv = "hello world"; // Your 'correct value' 
     //Set the value to a substring of cv at the current length
     this.value = cv.substring(0, this.value.length); 
 };

http://jsfiddle.net/9yfCe/

于 2013-05-20T01:00:18.407 に答える
0

これは、キーアップ時にイベントを維持することで得られる速度とほぼ同じです。

var hw = "hello world";
$('#inputID').keyup(function(e){
    this.value = hw.substring(0, this.value.length);
});

デモ

編集: 3 人がほぼ同じ解決策を思いついたことにかなり驚いています。すごくかっこいい。

編集 2: 最初に入力した文字をスペースに置き換えて、文字の置き換えの影響を軽減するように少し調整しました。

var hw = "hello world";
$('#inputID').keydown(function (e) {
    if (e.which !== 8) { // allow backspace
        e.preventDefault();
        this.value += ' ';
    }
}).keyup(function () {
    this.value = hw.substring(0, this.value.length);
});

2 番目のデモ

于 2013-05-20T01:01:03.193 に答える
-1

バニラの Javascript は、多くのイベントですぐに混乱してしまいます。

jQuery は、適切なスコープで実行されるように、アクションをキューにスケジュールします。

$('#inputID').keyup(function(e){
  var cv=["h","e","l","l","o"," ","w","o","r","l","d",""];

  var i=$('#inputID').val();

  for (j=0;j<11;j++){

    $(this).val($(this).val().replace(i[j],cv[j]));

}
});

フィドル: http://jsfiddle.net/Xedus129/MenpW/

于 2013-05-20T00:56:39.327 に答える