2011-08-01 43 views
2

我有這樣jQuery的不能申請onmousedown事件錨標記

<ul id="nav"> 
<li> <a id="firstLink" href="#"> Link 1 </a> </li> 
<li> <a id="secondLink" href="#"> Link 2 </a> </li> 
<li> <a id="thirdLink" href="#"> Link 3 </a> </li> 
<li> <a id="fourthLink" href="#"> Link 4 </a> </li> 
</ul> 

導航菜單,我想一個函數,每個錨標記關聯的鼠標下來,我有一個外部JS文件和我的代碼是

$(document).ready(function() { 
$('#firstLink').onmousedown(doSomething()); 
[ ... ] 
}); 

function doSomething() { 
// this function does something 
} 

我的問題是,如果我把事件處理程序內嵌的腳本工作,沒有問題是長大。

<li> <a href="#" id="firstLink" onmousedown="doSomething()"> Link 1 </a> </li> 

,如果我使用外部文件另一方面,如上圖所示,沒有任何反應和Chrome給我回Uncaught TypeError: Object [object Object] has no method onmousedown,Firefox和螢火蟲還給我$("#firstLink").onmousedown is not a function。我不明白,我做錯了什麼?

回答

12
$('#firstLink').onmousedown(doSomething()); 

應該

$('#firstLink').mousedown(doSomething); 
+0

謝謝你,我瘋了!如果'doSomething()'接受參數呢?是否允許在調用函數時通過它們,或者是否需要寫入: '$('#firstLink')。mousedown(function(){ doSomething(par1,par2); });' – haunted85

+0

@ haunted85,你需要把它寫下來鏈接你的例子。 – Dogbert

0

你可以做這樣的事情阻止默認事件:

$('#firstLink').onmousedown(function(e){ 

e.preventDefault(); 


// do something 

}); 

文檔here

但是,你可能想用「以condier。點擊()'而不是mousedown。

1

這是mousedown,而不是onmousedown。

$(document).ready(function() { 
$('#firstLink').mousedown(doSomething()); 
[ ... ] 
}); 
0

您也可以使用「on」事件處理程序。從Jquery 1.7開始,這是附加事件的正確方法 - 它取代了bind(),delegate()和live()。

$(document).ready(function() { 
$('#firstLink').on("mousedown", doSomething()); 
});