我已经在iPhone 我的网络应用程序中实现了一个标准的 jQuery 自动增长/扩展 textarea 插件。它工作正常,除了两个问题(如下所列)。首先,请允许我强调一下,我已经尝试了谷歌搜索并尝试了不同的教程,并得出结论,这是最适合我需要的教程。
问题 1. 延迟扩展 textarea onKeyUp。如何?在 keyup 上调用函数 expand:
$(this).keyup(update);
由于我使用 CSS3 动画 (-webkit-transition) 为扩展设置动画,并且由于站点/“应用程序”是为 iPhone 构建的,因此我需要将此操作延迟 500 毫秒,以便打字不会因此而滞后。我在代码的不同部分尝试了不同的解决方案,例如 setTimeOut,甚至延迟等,但它不起作用。时期。
问题 2:textarea 上的填充会导致其随机扩展,并且扩展为应有的两倍。
padding:10px 10px;
这是一个已知问题 - 我知道,但到目前为止,似乎知道一个人还没有弄清楚如何正确处理它。删除填充使一切正常。在不建议我使用另一个插件或只是删除填充的情况下,如何更改代码以使其与填充一起使用?
处理扩展的 JS 代码:
(function($) {
/*
* Auto-growing textareas; technique ripped from Facebook
*/
$.fn.autogrow = function(options) {
this.filter('textarea').each(function() {
var $this = $(this),
minHeight = $this.height(),
lineHeight = $this.css('lineHeight');
var shadow = $('<div></div>').css({
position: 'absolute',
top: -10000,
left: -10000,
width: $(this).width(),
fontSize: $this.css('fontSize'),
fontFamily: $this.css('fontFamily'),
lineHeight: $this.css('lineHeight'),
resize: 'none'
}).appendTo(document.body);
var update = function() {
var val = this.value.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/&/g, '&')
.replace(/\n/g, '<br/>');
shadow.html(val);
$(this).css('height', Math.max(shadow.height() + 15, minHeight));
$("#guestInfoNameLable").css('height', Math.max(shadow.height() + 15, minHeight));
}
var fix = function() {
var val = this.value.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/&/g, '&')
.replace(/\n/g, '<br/>');
shadow.html(val);
$(this).css('height', minHeight);
$("#guestInfoNameLable").css('height', minHeight);
}
$(this).keyup(update);
$(this).change(fix);
//$(this).change(update).keyup(update).keydown(update);
update.apply(this);
});
return this;
}
})(jQuery);
HTML 表单:
<div class="guestInfoLabel" id="guestInfoNameLable">guest</div>
<textarea id="guestInfoName" autocomplete="off" autocorrect="off"></textarea>