加载时会触发两个事件,但不会使用指定的事件处理程序注册。不行为的代码是:
$("#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()");
}
答案 0 :(得分:2)
您需要更改:
$("#calendar_menu_item").bind('click', loadCalendarContent() );
$("#patient_menu_item").bind('click', loadPatientContent() );
应该是:
$("#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 );
答案 1 :(得分: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);
答案 2 :(得分:0)
loadCalendarContent
是对函数的引用,但是loadCalendarContent()
执行函数,所以改变它:
$("#calendar_menu_item").bind('click', loadCalendarContent() );
到
$("#calendar_menu_item").bind('click', loadCalendarContent);