1

月のグリッドを示す 1 つの div と、選択した日付のイベントを示す 2 番目の div の 2 つの部分で構成されるカスタム カレンダーを作成しています。現在の月のカレンダー グリッドが自動的に読み込まれ、毎日のイベントの表示が正しく機能します。ただし、ユーザーがボタンをクリックして次の月または前の月を表示すると、日付をクリックすることはできなくなります。また、月の変更は、動的に読み込まれるカレンダーでは機能しなくなりました。

これは私が使用しているjQueryコードです:

<script type="text/javascript">
    $(document).ready(

    function() {
        $('div.calendar_events').text('To view the events on any of the highlighted dates, simply click the date.');
        $('div.number').click(

        function(e) {
            e.preventDefault();
            var theDate = $(this).attr('id').split('-');
            $('div.calendar_events').load('ajax/calendar_events.php?month=' + theDate[1] + '&day=' + theDate[2] + '&year=' + theDate[3]);
        });
        $('a.changemonth').click(

        function(e) {
            e.preventDefault();
            var theDate = $(this).attr('id').split('-');
            $('div.calendar').load('ajax/calendar_view.php?month=' + theDate[1] + '&year=' + theDate[2]);
        });
    });
</script>
4

2 に答える 2

1

live()動的に生成されるコンテンツではなく、jQueryのメソッドを使用しclickます。以下に例を示します。

$('selector').live('click', function(){
   // your code....
});

。住む()

現在または将来、現在のセレクターに一致するすべての要素のイベントにハンドラーをアタッチします。

于 2010-07-26T19:07:34.273 に答える
0

を使用してイベントを直接設定しないでくださいclicklive代わりに使用してください。

$('div.number').live('click', function() { .. });

新しい AJAX コンテンツが読み込まれると、古いコンテンツが新しいコンテンツに置き換えられ、、 などbindのショートカット メソッドを使用して、置き換えられたコンテンツに以前にアタッチされたすべてのイベント ハンドラーも消去されます。clickchange

一方、ライブ イベント ハンドラーはドキュメントに追加され、DOM でイベントがバブリングするため、すべてのイベントは最終的にドキュメントに到達します (決して置き換えないか、理想的には決して置き換えないでください:)。イベントを追加するためのdocument安全な場所として。

delegateまた、特にパフォーマンス フリークの場合は、イベント バブリングを利用する別の方法もチェックしてください。

于 2010-07-26T19:07:05.553 に答える