1

我正在编写一个自定义日历,它由两部分组成,一个 div 显示月份网格,另一个 div 显示所选日期的事件。当前月份的日历网格会自动加载,并且每日事件的显示工作正常。但是,当用户单击按钮查看下个月或上个月时,单击日期不再有效。此外,更改月份不再适用于动态加载的日历。

这是我正在使用的 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

不要直接使用click. 改为使用live

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

当新的 AJAX 内容加载时,新的内容会替换旧的内容,并且还会清除您之前使用bind或其快捷方式(例如clickchange等)附加到该替换内容的所有事件处理程序。

另一方面,实时事件处理程序被添加到文档中,并且由于 DOM 中的事件冒泡,所有事件最终都会到达文档(您永远不会替换,或者理想情况下不应该替换 :),所以您可以认为作为document添加事件的避风港。

还要检查delegate一下,这是利用事件冒泡的另一种方法,特别是如果你是一个性能狂。

于 2010-07-26T19:07:05.553 回答