2013-01-16 37 views
0

我有一堆列表中的导航链接。每次我点击一个链接时,我都想显示一些DIV并隐藏所有其他链接。这是常见的内容面板模式。jquery点击不能正常工作

我不能让它做这方面的工作:

<script type="text/javascript"> 
jQuery(document).ready(function() { 

function show_tab(t) { 
    jQuery(".tab").hide(); 
    jQuery(t).toggle(); 
} 

jQuery("#login").click(show_tab("#login_tab")); 

jQuery("#projects").click(show_tab("#projects_tab")); 

}); 
</script> 

但我可以把它通过使用匿名函数只是工作:

<script type="text/javascript"> 
jQuery(document).ready(function() { 

jQuery("#login").click(function() 
{ 
jQuery(".tab").hide(); 
jQuery("#login_tab").toggle(); 
}); 

jQuery("#projects").click(function() 
{ 
jQuery(".tab").hide(); 
jQuery("#projects_tab").toggle(); 
}); 

}); 
</script> 

有人可以解释为什么一个方法和作品另一个不?

回答

1

您需要通过functionname而不是调用它。

jQuery("#login").click(show_tab);  
jQuery("#projects").click(show_tab)); 

您可以使用当前元素的id生成标签的ID在show_tab

function show_tab() 
{  
    jQuery(".tab").hide(); 
    jQuery("#" + this.id + "_tab").toggle();  
} 
1

变化:

jQuery("#login").click(show_tab("#login_tab")); 
jQuery("#projects").click(show_tab("#projects_tab")); 

jQuery("#login").click(function() { 
show_tab("#login_tab"); 
}); 
jQuery("#projects").click(function() { 
    show_tab("#projects_tab"); 
}); 
1

当你做这个...

jQuery("#login").click(show_tab("#login_tab")); 

它会立即运行show_tab("#login_tab")并使用结果作为.click处理分配的参数。如果你需要传递一个函数而不运行它,那么你必须在没有括号的情况下引用它。你可以这样做......

jQuery("#login").click(function() { 
    show_tab("#login_tab"); 
}); 

甚至这个...

jQuery("#login").click(show_login_tab); 

function show_login_tab() { 
    show_tab("#login_tab"); 
} 

也就是说,在本质上是一样的创建匿名函数,当你在工作的版本一样。