我有这样的导航菜单
<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
。我不明白,我做错了什么?
答案 0 :(得分:12)
$('#firstLink').onmousedown(doSomething());
应该是
$('#firstLink').mousedown(doSomething);
答案 1 :(得分:1)
它是mousedown而不是mousedown。
$(document).ready(function() {
$('#firstLink').mousedown(doSomething());
[ ... ]
});
答案 2 :(得分:0)
您可以通过执行以下操作来阻止默认事件:
$('#firstLink').onmousedown(function(e){
e.preventDefault();
// do something
});
文档here
但你可能想要使用'.click()'来代替mousedown。
答案 3 :(得分:0)
您也可以使用“on”事件处理程序。从Jquery 1.7开始,这是正确的附加方式 一个事件 - 它取代了bind(),delegate()和live()。
$(document).ready(function() {
$('#firstLink').on("mousedown", doSomething());
});