jQuery не может применить onmousedown к тегам привязки - PullRequest
2 голосов
/ 01 августа 2011

У меня есть такое меню навигации

<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 ]

12 голосов
/ 01 августа 2011
$('#firstLink').onmousedown(doSomething());

должно быть

$('#firstLink').mousedown(doSomething);
1 голос
/ 01 августа 2011

Это mousedown и не onmousedown.

$(document).ready(function() {
$('#firstLink').mousedown(doSomething());
[ ... ]
});
0 голосов
/ 21 февраля 2014

Вы также можете использовать обработчик событий «on». Начиная с Jquery 1.7, это правильный способ Событие - оно заменяет bind (), делегат () и live ().

$(document).ready(function() {
 $('#firstLink').on("mousedown", doSomething());
});
0 голосов
/ 01 августа 2011

вы можете предотвратить событие по умолчанию, выполнив что-то вроде этого:

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

e.preventDefault();


// do something

}); 

Документация здесь

Но вы можете захотеть использовать метод ´.click ()´ вместо mousedown.

...