2017-02-18 8 views
1

マイ例:からkeyupイベントは、パフォーマンスの低下を働いている

$(document).on('keyup', '[contenteditable=true]', function (e) { 
 
     
 
    let _this = $(this), text = _this.text(); 
 

 
    if (text.length === 1) { 
 
     let span = $('<span>').text(text); 
 
     _this.html(span); 
 
    } 
 

 
    console.log(_this.html()); 
 

 
});
[contenteditable=true] { 
 
    border: 1px solid #ccc; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script> 
 
<div contenteditable="true"></div>

私の問題:私はdiv要素の中に通常の速度でいくつかのテキスト(1文字以上)を入力すると、コードが正常に動作します。しかし、高速でテキストを入力しようとすると、<span>タグがdivに追加されませんでした。

どうすれば修正できますか?あなたはときに気管切開ユーザ入力、それがより効率的だ代わりにinputイベントを使用することができ

+2

それは最初からkeyupがで複数の文字を見て意味し、あなたは速いつもりだとき、あなたは最初からkeyup前mulitple keydownsを持っているという事実だ、*スピード*ではありませんdiv。 'keypress'を使用した場合、望みの結果が得られます(または、Zakariaが指摘しているように' input' - ペーストで 'input'が発生します。 –

+0

@ T.J.Crowderありがとう!私はそれを覚えています。 –

答えて

3

、以下の例をご確認ください:

$(document).on('input', '[contenteditable=true]', function (e) { 
    //Your logic 
}); 

、あるいはまたkeypressT.J. Crowder comment'sと言う:

$(document).on('keypress', '[contenteditable=true]', function (e) { 
    //Your logic 
}); 

・ホープ、このことができます。

$(document).on('input', '[contenteditable=true]', function (e) { 
 
     
 
    let _this = $(this), text = _this.text(); 
 

 
    if (text.length === 1) { 
 
     let span = $('<span>').text(text); 
 
     _this.html(span); 
 
    } 
 

 
    console.log(_this.html()); 
 

 
});
[contenteditable=true] { 
 
    border: 1px solid #ccc; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script> 
 
<div contenteditable="true"></div>

関連する問題