2013-03-13 219 views
0

我在jQuery中有一個點擊事件。期望的行爲是每次單擊鏈接時執行的功能。但是,實際的行爲是加載頁面,然後該函數被執行一次,永遠不會再執行。違規代碼如下。謝謝!頁面加載後,點擊事件只觸發一次

<!DOCTYPE html> 
<head> 
<meta charset="utf-8"> 

<style> 
#sub { 
position:fixed; 
z-index:999; 
margin-top:180px; 
margin-left:200px; 
display:none;} 
</style> 

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 

<script> 
function showdiv(divid) { 
    $('.menu').hide(); 
    $('#'+divid).fadeToggle('slow'); 
}; 
$(document).ready(function(){ 
    $('a#opt1').click(showdiv('sub')); 
    $('a#opt2').click(function(){$('.menu').hide();}); 
}); 
</script> 
</head> 
<body> 
    <li><a id="opt1" href="#">Option1</a></li> 
    <li><a id="opt2" href="#">Option2</a></li> 
</ul> 
<ul id="sub"> 
    <li><a href="#">Mission</a></li> 
    <li><a href="#">Press</a></li> 
</ul> 

+0

您應該將函數名稱傳遞給'.click',而不是返回的值。 – 2013-03-13 01:56:20

回答

1

你應該給函數的引用傳遞給.click。在你的情況下,你傳遞了函數的返回值而不是實際的函數。長話短說,你應該function(){}把它包:

$('a#opt1').click(function(){ 
    showdiv('sub'); 
}); 

jQuery documentation.click居然說你必須通過一個函數,而是你在你的例子通過undefined。這就是爲什麼它只執行一次。

+0

d'oh。謝謝你和所有回答他們的人! – lrp 2013-03-13 02:11:10

1

$('a#opt1').click(showdiv('sub'));將運行功能showdiv立即設置返回值作爲所謂onclick(在這種情況下,什麼都沒有,所以你的點擊處理程序似乎不工作)。

你應該在一個匿名函數包裝這個。

$('a#opt1').click(function() { showdiv('sub') }); 
1

你需要用的功能匿名函數:

$('a#opt1').click(function() { 
    showdiv('sub'); 
}); 
相關問題