イベントにバインドするときにラグが発生しkeyup
ます。通常、keydown
イベントにバインドする場合、テキスト領域の値はまだ変更されていないため、keydown
イベント中に押されたキーを判別するまで、2番目のテキスト領域の値を更新することはできません。幸運なことString.fromCharCode()
に、新しく押されたキーを2番目のテキスト領域に追加するために使用できます。これはすべて、ラグなしで2番目のテキスト領域をすばやく更新するために行われます。
$('.one').on('keydown', function(event){
var key = String.fromCharCode(event.which);
if (!event.shiftKey) {
key = key.toLowerCase();
}
$('.two').val( $(this).val() + key );
});
これがデモです:http://jsfiddle.net/agz9Y/2/
これにより、2番目のテキスト領域の内容が最初のテキスト領域と同じになります。最初のテキスト領域を2番目のテキスト領域に追加する場合は、上書きするのではなく、最初の値を2番目のテキスト領域に追加するだけです。
$('.one').on('keydown', function(event){
var key = String.fromCharCode(event.which);
if (!event.shiftKey) {
key = key.toLowerCase();
}
$('.two').val( $('.two').val() + $(this).val() + key );
});
これがデモです:http://jsfiddle.net/agz9Y/3/
アップデート
これを少し変更して、.two
要素が独自の値を記憶するようにすることができます。
$('.one').on('keydown', function(event){
var key = String.fromCharCode(event.which);
if (!event.shiftKey) {
key = key.toLowerCase();
}
//notice the value for the second textarea starts with it's data attribute
$('.two').val( $('.two').data('val') + ' -- ' + $(this).val() + key );
});
//set the `data-val` attribute for the second textarea
$('.two').data('val', '').on('focus', function () {
//when this textarea is focused, return its value to the remembered data-attribute
this.value = $(this).data('val');
}).on('change', function () {
//when this textarea's value is changed, set it's data-attribute to save the new value
//and update the textarea with the value of the first one
$(this).data('val', this.value);
this.value = this.value + ' -- ' + $('.one').val();
});