0

コンテンツが 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');
});
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()ため、エラーが発生している場所がわかりません。

入力している動的コンテンツをロードした後、必ずテキストエリアでキーアップをトリガーしてください。jQueryを使用load()してコンテンツを取り込む場合は、コールバック関数でキーアップをトリガーします。

JSフィドル

于 2012-10-05T14:27:00.593 に答える