Kee*_*ker 6 javascript jquery textarea live autoresize
不久之前,我已经为那些希望他的textarea成长的人解决了一个问题.我做了监听的功能scroll和keyup领域的活动,并重新计算的行数.我想在另一个项目中使用代码,但是有一个问题.textarea不知道为了解决这个问题,我正在使用live而不是bind,所以未来的区域也将被束缚.
现在我发现live执行速度比a慢很多bind.我在jsFiddle上创建了一个简化的例子.上面的textarea表现得像我想要的那样,但由于后期信令(我正在使用Chrome),新添加的内容会闪烁.
我怎样才能做得问题是live那么快bind?scroll不能与live声明一起使用.有没有一种方法,使scroll对live?是否有一个jQuery事件告诉我已经添加了一个新的TextArea,所以我可以使用bind来添加scroll新创建的元素?
我期待着你的想法.
编辑:更改了代码的链接.删除了scrollingCode.添加了另一个按钮来创建不同的textarea.问题与'滚动'有关.它不会开火.
澄清:我不知道什么函数会创建textarea的.我看到Chrome中动态添加的框闪烁.
对于未来的读者:
在jQuery 1.3.x中,只有以下JavaScript事件(除了自定义事件)才能与.live()绑定:
click, dblclick, keydown, keypress, keyup, mousedown, mousemove, mouseout, mouseover, and mouseup.从jQuery 1.4开始,.live()方法支持自定义事件以及所有冒泡的JavaScript事件.从jQuery 1.4.1开始,即使是使用live进行聚焦和模糊(映射到更合适,冒泡,聚焦和聚焦的事件).从jQuery 1.4.1开始,可以指定悬停事件(映射到mouseenter和mouseleave,然后映射到mouseover和mouseout).
答案很简单。scroll是防止闪烁的原因,因为它会在调整大小的第一刻触发。但scroll没有效果live(因为它不会冒泡),因此您新创建的文本区域将被调整大小,keyup但稍后会触发(因此闪烁)。
更新:当然我可以解决你的问题。你只需要问:) [演示]
\n\n$(\'textarea.autoresize\').live(\'keyup\', function() {\n var el = $(this);\n if (!el.data("has-scroll")) {\n el.data("has-scroll", true);\n el.scroll(function(){\n resizeTextArea(el);\n });\n }\n resizeTextArea(el);\n});\nRun Code Online (Sandbox Code Playgroud)\n\n重点是,它live与bind. 该keyup事件在所有元素上触发(因为live),有条件地添加唯一scroll事件。
更新 2:哦,顺便说一句,您的整个调整大小代码可以更好地编写为:
\n\n// resize text area (fixed version of Pointy\'s)\nfunction resizeTextArea(elem) {\n elem.height(1); elem.scrollTop(0);\n elem.height(elem[0].scrollHeight - elem[0].clientHeight + elem.height())\n}\xe2\x80\x8b\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
7314 次 |
| 最近记录: |