不久前我为某人解决了一个问题希望他的文本区域变大 https://stackoverflow.com/questions/4717635/jquery-building-an-autoresizing-textarea-that-doesnt-flash-on-resize。我做了一个函数来监听scroll
and keyup
该区域的事件并重新计算行数。我想在另一个项目中使用该代码,但出现了问题。文本区域不知道为了解决这个问题,我正在使用live
代替bind
,这样未来的区域也将被绑定。
现在我发现live
执行速度比bind
。我已经创建了jsFiddle 上的简化示例 http://jsfiddle.net/KeesCBakker/2D8Kf/。上面的文本区域的行为符合我的要求,但由于信号延迟(我使用的是 Chrome),新添加的文本区域会闪烁。
我怎样才能使live
一样快bind
?问题是scroll
不能与live
陈述。有没有办法启用scroll
for live
?是否有一个 jQuery 事件向我发出信号,表明已添加新的 TextArea,以便我可以使用绑定来添加scroll
在新创建的元素上?
我期待您的想法。
EDIT:更改了代码链接。删除了滚动代码。添加了另一个按钮来创建不同的文本区域。问题与“滚动”有关。它不着火。
澄清:我不知道什么函数将创建文本区域。我看到动态添加的框在闪烁Chrome.
对于未来的读者:
在 jQuery 1.3.x 中只有以下内容
JavaScript 事件(除了
自定义事件)可以绑定
。居住():click, dblclick, keydown,
keypress, keyup, mousedown, mousemove,
mouseout, mouseover, and mouseup
。作为
jQuery 1.4 的 .live() 方法
支持自定义事件以及所有
冒泡的 JavaScript 事件。作为
jQuery 1.4.1 甚至可以进行焦点和模糊工作
与现场(映射到更多
适当的、冒泡的、事件集中的
和对焦)。从 jQuery 1.4.1 开始
可以指定悬停事件(映射
mouseenter 和 mouseleave,其中,
依次映射到鼠标悬停和
鼠标移开)。
答案很简单。scroll
是防止闪烁的原因,因为它会在调整大小的第一刻触发。但scroll
没有影响live
(因为它不会冒泡),因此您新创建的文本区域将调整大小keyup
但它会稍后触发(因此闪烁)。
Update:当然我也可以解决你的问题。你只需要问:)[Demo http://jsbin.com/jquery-autoresize/]
$('textarea.autoresize').live('keyup', function() {
var el = $(this);
if (!el.data("has-scroll")) {
el.data("has-scroll", true);
el.scroll(function(){
resizeTextArea(el);
});
}
resizeTextArea(el);
});
重点是它混合了live
with bind
. The keyup
事件,在所有元素上触发(因为live
),添加了独特的scroll
有条件的事件。
Update 2:哦,顺便说一句,您的整个调整大小代码可以更好地编写为:
// resize text area (fixed version of Pointy's)
function resizeTextArea(elem) {
elem.height(1); elem.scrollTop(0);
elem.height(elem[0].scrollHeight - elem[0].clientHeight + elem.height())
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)