Могу ли я вызвать клик по элементу href, не вызывая ссылку href? - PullRequest
0 голосов
/ 24 января 2012

У меня есть фрагмент кода, который иногда должен запускаться скриптом, но я не хочу, чтобы он менял 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/">
<li id="42">

Ответы [ 3 ]

3 голосов
/ 24 января 2012

Я думаю, что это вызвано live ().Это происходит потому, что события всплывают до <body> и запускают событие щелчка на <a>.Вы можете использовать делегат () или on () (jQuery> 1.7), чтобы присоединить обработчик событий к <a>, а затем вернуть 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/

3 голосов
/ 24 января 2012

вместо triggerHandler(): http://api.jquery.com/triggerHandler/

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

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

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

0 голосов
/ 24 января 2012

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

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