2

我有这样的导航菜单

<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 和 Firebug 会返回我$("#firstLink").onmousedown is not a function。我不明白,我做错了什么?

4

4 回答 4

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

应该

$('#firstLink').mousedown(doSomething);
于 2011-08-01T14:23:26.553 回答
1

它是 mousedown 而不是 onmousedown。

$(document).ready(function() {
$('#firstLink').mousedown(doSomething());
[ ... ]
});
于 2011-08-01T14:25:39.690 回答
0

您可以通过执行以下操作来防止默认事件:

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

e.preventDefault();


// do something

}); 

文档在这里

但是您可能想使用 '.click()' 而不是 mousedown 来调节。

于 2011-08-01T14:24:52.983 回答
0

您还可以使用“on”事件处理程序。从 Jquery 1.7 开始,这是附加事件的正确方法 - 它取代了 bind()、delegate() 和 live()。

$(document).ready(function() {
 $('#firstLink').on("mousedown", doSomething());
});
于 2014-02-20T22:11:23.387 回答