この問題には別のアプローチが必要だと思います。keyup
テキストを入力しているときに、イベントにフックしてinput.a
テキスト幅を取得する必要があります。input.a
ただし、通常の方法ではテキストの幅を取得できないため、入力するたびに のテキストで更新されるように、ある種の複製された div を使用する必要があります。
$('#aclone').html($('input.a').val());
$('input.a').keyup(function () {
var clone_width, apos, bleft;
// make clone contain what input.a contains
$('#aclone').html($(this).val());
// get the width of cloned text
clone_width = $('#aclone').width();
// if it's bigger than input.a's current size, resize it
if (clone_width > $(this).width()) {
$(this).width(clone_width);
}
// calculate position for b
apos = $(this).position();
bleft = apos['left'] + $(this).width();
// adjust input.b's position
$('input.b').css({'left': bleft});
});
これをチェックしてください:http://jsfiddle.net/aemhd/
PS: 私のフィドルにはクローン div が表示されています。非表示にしたい場合はdisplay:none
、ブラウザが幅を計算できないため使用しないでください。代わりにtop:-9999px;left:-9999px;
、CSS を使用してビューポートの外側に配置してください。