0

我一直在寻找一种方法来确保所有脚本在内容通过 jQuery 加载进出页面时被相应地触发。

迄今为止最好的方法是 live 函数,但我无法让它在加载时触发函数,只能在加载元素的情况下运行。

例如。

$(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 功能上正确执行,但不会触发初始$('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');
});
4

2 回答 2

2

首先,你想用来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)工作原理如下:

  1. 查找document匹配的元素textarea(这也适用于页面加载后添加的元素)
  2. 如果keyup事件被触发,执行回调方法

因此,您可以编写一些比document减少计算时间更具体的内容。例如:

$('#myForm').on('keyup', 'textarea', function)
于 2012-10-05T10:41:01.693 回答
1

Alp 的反应完美。处理程序在您使用时触发,trigger()所以我不明白您在哪里得到错误。

确保在加载了要填充的任何动态内容之后触发 textarea 上的 keyup。如果您使用 jQueryload()引入内容,请在回调函数中触发 keyup。

JS小提琴

于 2012-10-05T14:27:00.593 回答