2011-01-28 48 views
1

加載時,兩個事件被觸發,但未註冊到指定的事件處理程序。未表現的代碼是:

  $("#calendar_menu_item").bind('click', loadCalendarContent()); 
      $("#patient_menu_item").bind('click', loadPatientContent()); 

這是整個腳本:

/* Add stuff only once the DOM is loaded. */ 
    $(document).ready 
     (
     function(){ 
      //Initialize the main menu 
      var menuItems = [$("#calendar_menu_item"), $("#patient_menu_item")]; 

      for (i = 0; i < menuItems.length; i++) { 
       var menuItem = menuItems[i]; 

       menuItem.bind('mouseover', function(){ 
        $(this).css("background-color", "#749ccf"); 
       }); 

       menuItem.bind('mouseout', function(){ 
        $(this).css("background-color", "#506077");      
       }); 
      }  

      $("#calendar_menu_item").bind('click', loadCalendarContent()); 
      $("#patient_menu_item").bind('click', loadPatientContent());    
     } 
     ); 

    function loadCalendarContent(){ 
     $("#content_area").load('calendar.html');   
    } 

    function loadPatientContent(){ 
     $("#content_area").load('patient.html');    
    }  

    function doAction(){ 
     alert("in doScript()"); 
    } 

回答

2

你需要改變:

 $("#calendar_menu_item").bind('click', loadCalendarContent()); 
     $("#patient_menu_item").bind('click', loadPatientContent()); 

應該是:

​​

這是因爲loadCalendarContent(和loadPatientContent也不返回任何東西,所以loadPatientContent()是未定義的。換句話說,您每次嘗試運行undefined時都會點擊#calendar_menu_item。如果您想在domready中太(的document.ready)來執行的功能,你可以做到這一點下面的代碼:

 loadCalendarContent(); 
     loadPatientContent(); 
     $("#calendar_menu_item").bind('click', loadCalendarContent); 
     $("#patient_menu_item").bind('click', loadPatientContent); 
+0

感謝Alxandr。 – 2011-01-28 00:50:04

0

loadCalendarContent是參考作用,但loadCalendarContent()執行相應的功能,所以更改此:

$("#calendar_menu_item").bind('click', loadCalendarContent()); 

$("#calendar_menu_item").bind('click', loadCalendarContent); 
2

你不太理解函數作爲第一類對象。當你看到這一點:

foo() 

這是一個叫做foo正被調用的函數。當你看到這個:

foo 

這是一個變量。變量可以包含函數。

你的代碼是這樣的:

$(element).bind('click', foo()); 

當你看到()foo後,就意味着它的調用函數,並用它的返回值替換它的參考。這不是你想要的。你想要的只是將該函數作爲變量傳遞。這看起來是這樣的:

$(element).bind('click', foo); 

這樣,回調就會被註冊爲函數的引用,並且該函數可以在必要時被調用,而不是直接調用。

具體來說,您的代碼應該如下所示:

$("#calendar_menu_item").bind('click', loadCalendarContent); 
$("#patient_menu_item").bind('click', loadPatientContent);