我一直在寻找一种方法来确保在通过jQuery加载将内容加载到页面和页面中时相应地触发所有脚本。
到目前为止,最好的方法是实时函数,但我无法让它在加载时触发函数,只能在加载元素的情况下运行。
例如。
$(document).ready(function(){
$('textarea').live('keyup',function(){
$(this).innerHeight(20 + (16 * ($(this).prop('scrollHeight') / $(this).css('line-height').replace('px', '') - 1.25)));
});
$('textarea').trigger('keyup');
});
这将使文本区域在键控功能上正确执行,但不会触发初始$('textarea').keyup();
我将如何做到这一点/有没有更好的方法来实现我所追求的目标。
我已经做到了这一点,但是一旦页面加载,我的初始调用就不起作用:
$(document).ready(function(){
$(document).on('keyup', 'textarea',function(){
$(this).innerHeight(20 + (16 * ($(this).prop('scrollHeight') / $(this).css('line-height').replace('px', '') - 1.25)));
});
$('textarea').trigger('keyup');
});
首先,您希望使用 trigger()
来触发事件。
另外,不要使用 live()
,因为它已弃用。而是使用 on()
.语法略有变化:
$(document).ready(function(){
$(document).on('keyup', 'textarea', function(){
$(this).innerHeight(20 + (16 * ($(this).prop('scrollHeight') / $(this).css('line-height').replace('px', '') - 1.25)));
});
$('textarea').trigger('keyup');
});
$(document).on('keyup', 'textarea', function)
中的选择器的工作原理如下:
- 在
document
中查找与textarea
匹配的元素(这也适用于页面加载后添加的元素) - 如果触发
keyup
事件,则执行回调方法
因此,您可以编写比document
更具体的内容来减少计算时间。例如:
$('#myForm').on('keyup', 'textarea', function)
Alp 的响应非常有效。 处理程序会在您使用trigger()
时触发,所以我不明白您从哪里得到错误。
确保在加载要填充文本区域的任何动态内容后触发文本区域上的键控。 如果您使用 jQuery 的load()
引入内容,请在回调函数中触发 keyup。
JS小提琴