Могу ли я вызвать щелчок на элементе href без запуска ссылки href?

У меня есть часть кода, которая иногда должна запускаться скриптом, но я не хочу, чтобы он менял URL-адрес на моей странице. (это испортит состояние истории по какой-то нечетной причине)

Код, который мне нужно вызвать:

$(".photos-bottom .albums #albums li").live("click", function() {
 // my action here
 });

 The code I use to trigger it:
 $(".photos-bottom .albums #albums li:first").trigger("click");

Ссылка, чтобы щелкнуть, однако я только заметил, он предположил, чтобы щелкнуть li, а li находится внутри href, поэтому я не знаю, почему он все еще нажимает на нее.

<a href="#/photos/1/album/42/" rel="address:/photos/1/album/42/" target="_blank"><li id="42"> </li></a>
3 ответа

попробуйте triggerHandler() вместо: http://api.jquery.com/triggerHandler/

Метод.triggerHandler() ведет себя аналогично.trigger() со следующими исключениями: Метод.triggerHandler() не вызывает поведение события по умолчанию (например, представление формы)... [omissis]

В противном случае используйте trigger() с extraparameter в вызове (см http://api.jquery.com/trigger/) и в обработчике просто проверить аргументы, передаваемые. Если параметр был передан, вы предотвратите действие ссылки по умолчанию. <evt>.preventDefault()</evt>

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


Я думаю, что это вызвано live(). Это связано с тем, что события пузырятся до и запускают событие click на . Вы можете использовать делегат() или on() (jQuery> 1.7), чтобы атташе обработчик события в а затем вернуть значение false из функции, чтобы остановить ее от запуска перенаправления

Вы могли бы сделать

$(".photos-bottom .albums #albums a").delegate(".photos-bottom .albums #albums li", "click", function(e) {
 // my action here
 alert("hi");
 //return false so that you stop the immediate propagation of the event
 return false;
 });


 $(".photos-bottom .albums #albums li:first").trigger("click");

Скрипка с делегатом http://jsfiddle.net/3CQFK/


Да, это нормальная задача. Там есть функция, которую вы можете вызвать событие, которое получает обратный вызов, который предотвращает действие по умолчанию в браузере, называемое preventDefault. Ваш код будет:

$(".photos-bottom .albums #albums li").live("click", function(event) {
 event.preventDefault();
 // your code here
 // ...
});

licensed under cc by-sa 3.0 with attribution.