Редактировать: Добавлен динамический элемент (кнопка) на размытие, чтобы вычислить ширину и сразу удалить .. Так что вам не нужно ничего менять в html.
DEMO
var $getWidth = $('#getTextWidth');
$('input[type=text]')
.focus(function() {
var $this = $(this);
if ($this.val().length > 22) {
//$(this).data('default', $(this).data('default') || $(this).width());
$this.stop().animate({width: 370}, 'slow');
$this.parent().addClass('cooling');
}
})
.blur(function() { /* lookup the original width */
var $this = $(this);
var textWidth = $('<input type="button" />')
.appendTo('body')
.attr({'id': 'tmpSpan'})
.css({display: 'none'})
.val($this.val()).outerWidth();
$('#tmpSpan').remove();
$this.stop().animate({width: textWidth + 'px'},'fast');
$this.parent().removeClass('cooling');
});
Я добавил скрытый диапазон, а затем добавил текстовое поле внутри диапазона, чтобы вычислить ширину диапазона.Затем получил externalWidth диапазона и применил его к текстовому полю при размытии.
DEMO