2013-01-16 104 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"); 
} 

也就是說,在本質上是一樣的創建匿名函數,當你在工作的版本一樣。