2011-01-28 61 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); 
相关问题