2010-07-26 36 views
1

我寫一個自定義日曆,是由兩個部分組成,一個DIV顯示當月網格,第二格顯示爲事件所選日期。當前月份的日曆網格會自動加載,並且日常事件的顯示可以正常顯示。但是,當用戶單擊按鈕查看下一個或上個月時,單擊日期不再有效。另外,更改月份不再適用於動態加載的日曆。我的腳本適用於靜態內容很好,但是當內容是通過AJAX改變遊 - jQuery的

這是我使用jQuery代碼:直接使用click

<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> 

回答

0

不要設置的事件。改爲使用live

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

當新的AJAX內容加載,新內容取代了舊的,也使用bind或它的快捷方式的方法消滅了先前附到更換內容的所有事件處理程序,如clickchange

直播事件處理程序,在另一方面,被添加到該文件,並且由於事件在DOM冒泡,所有的事件最終可達文件(你永遠無法取代,或最好不應當取代:),所以你可以認爲document是添加事件的避風港。

也會檢出delegate這是另一種方式來利用事件冒泡的,特別是如果你是一個怪胎性能。

1

使用jQuery代替clicklive()方法用於動態生成的任何內容,在這裏是一個例子:

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

.live()

附加的處理程序的事件當前 選擇現在或將來匹配其中,所有 元素。

相關問題