Событие щелчка не запускает действие по умолчанию - PullRequest
1 голос
/ 27 сентября 2010

Итак, у меня есть <ol> с некоторыми событиями, прикрепленными с помощью jQuery (1.4.2). Все сделано в $(document).ready() -колл.

Странная вещь заключается в том, что щелчок по <li> генерирует щелчок по исправлению <a> (это можно увидеть, раскомментировав console.log() -часть), но он не перемещается по UA. Почему это? event.stopPropagation() вызывает event.preventDefault() внутренне или как?

Я знаю, что могу сделать window.location.href = $('h3 a', this).eq(0).attr('href'); в событии click для <li>, но я действительно хотел бы знать, почему он не работает с click-call.

Заранее благодарим товарищей SOers!

Кодекс:

HTML:

<ol class="news">
    <li>
        <img src="http://dummyimage.com/325x325/000/fff.jpg">
        <span class="date">12th of May</span>
        <h3><a href="http://example.com/lorem-ipsum">Lorem Ipsum</a></h3>
        <p>Nullam rhoncus, massa nec posuere rutrum, mauris metus ornare lacus, facilisis. Rhoncus purus dui vel lectus.</p>
    </li>
    <li>
        <span class="date">3rd of May</span>
        <h3><a href="http://example.com/lam-sum-idum">Lam sum idum</a></h3>
        <p>Mauris volutpat enim nec turpis pharetra consectetur. Cras faucibus mattis dignissim.</p>
    </li>
    <!-- many more LIs here... -->
</ol>

(и да. HTML 4.01 был проверен.)

JavaScript:

$('.news li').click(function () {
    $('h3 a', this).eq(0).click();
}).hover(function () {
    $(this).toggleClass('hover');
}).find('h3 a').click(function (e) {
    e.stopPropagation();// prevent recursion
    //console.log(this);
});

1 Ответ

2 голосов
/ 27 сентября 2010

Это нормально, ручное срабатывание click на якоре не следует по ссылке, срабатывание «события по умолчанию» часто не имеет место при моделировании действия.Установка location.href - вот путь, как здесь:

$('.news li').click(function () {
    window.location.href = $(this).find('h3 a').attr('href');
}).hover(function () {
    $(this).toggleClass('hover');
}).find('h3 a').click(function (e) {
    e.stopPropagation(); //so ctrl+click works on the link, etc
});

Кроме того, нет необходимости в .eq(0), .attr('href') получит href от первого элементав подходящем наборе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...