jQueryを多用して、WEBベースの管理システムを開発中です。
append等で、初期表示されたHTMLに要素を追加する際の注意点
Javascriptでは初期表示された際の各要素にはイベントが割り当てられますが
append等で追加された要素には何もしないとイベントが割り当てられないようです。
(使っている用語が間違っているかもしれませんが・・・)
動作させるには、jQueryのバージョンが1.3になって増えた新機能「live()」を使用します。
→live(type, fn) – jQuery 1.3.1 日本語リファレンス
ある管理画面で、
ajaxを利用して表示された検索結果から、入力フィールドを追加する機能を作っているのですが
追加された入力フィールドでdatepickerを使う必要がありました。
単純に
jQuery(function($){ $(".classname").datepicker({ dateFormat: 'yy-mm-dd' }); } function hogehoge(){ html = '<input type="text" class="classname" />'; $('#hogehoge').append(html); }
で追加した入力フィールドに、フォーカスインしても、datepickerが表示されません。
jQuery(function($){ $(".classname").datepicker({ dateFormat: 'yy-mm-dd' }); } function hogehoge(){ $('.datepicker').live('focusin',function(){ $(".classname").datepicker({ dateFormat: 'yy-mm-dd' }); }); html = '<input type="text" class="classname" />'; $('#hogehoge').append(html); }
これで動作します。
1行目から6行目で初期表示された入力フィールドにdatepickerを適用します。
7行目からが要素を追加する部分です。
8行目で追加された要素に”focusin”イベントを割り当てています。
忘れないように・・・