2013-01-16 3 views
0

У меня есть группа ссылок навигации внутри списка. Каждый раз, когда я нажимаю ссылку, я хочу так показать DIV и скрыть все остальные. Это общий шаблон панели содержимого.jquery click не работает с нормальной функцией

Я не могу заставить его работать, делая это:

<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

Вам необходимо передать name из function, а не позвонить.

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

Вы можете использовать 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"); 
} 

Это, по сути, является тем же самым, как создание анонимной функции, как вы это делали в рабочей версии.

Смежные вопросы