Почему я не могу щелкнуть () по ссылкам в jQuery? - PullRequest
3 голосов
/ 14 ноября 2011

Я столкнулся с любопытством в jQuery: если я вызываю .click() по ссылке, вызывается обработчик событий click, но на самом деле ссылка не отслеживается (как если бы она была нажата в браузере):

<a id="link" href="http://www.google.com>Link</a>

$("#link").click() // won't take me to Google

Но в простом Javascript все ведет себя как ожидалось:

document.getElementById("link").click() // *will* take me to Google

Это, очевидно, преднамеренное поведение - но я изо всех сил пытаюсь понять, почему clickбыл реализован так - со специальным исключением для ссылок?

Fiddle здесь: http://jsfiddle.net/9a6sp/

Чтобы уточнить: я не спрашиваю, как щелкнуть ссылку в JS, а, скорее, почемуПоведение по умолчанию в jQuery заключается в том, что ссылки не нажимаются при вызове .click()

Ответы [ 5 ]

8 голосов
/ 14 ноября 2011

domelement.click() не поддерживается кросс-браузер для перенаправления.Если вам нужно перенаправить на место в ссылке, вы можете использовать:

window.location = $('#link').prop('href');
4 голосов
/ 14 ноября 2011

jQuery.click () предназначен для привязки обработчика щелчка к элементу. Однако его можно использовать для запуска привязки события click () с помощью jQuery.

jQuery.trigger () запустит связанный обработчик событий, такой как $(someElement).trigger("click");

Если вы хотите вызвать ссылку в jQuery, могу я предложить следующее.

$(someelement).click(function () {
  window.location = $(link).attr("href");
});
0 голосов
/ 14 ноября 2011

Почему это не работает, в jsFiddle $('#link') не выбирает якорь в html, и click() завершается ошибкой.Даже селектор типа $('a').href не работает.

http://jsfiddle.net/yangchenyun/L9EUS/

Код работает в обычном браузере.Я протестировал код на stackoverflow.com с этим кодом jQuery('a').eq(1).click() в Chrome Concole, он вызывает click() на логотипе.

Так что в заключение , нажмите () ссылки работаютв jQuery ().jsfiddle.net прерывает обычную функцию jQuery.

0 голосов
/ 14 ноября 2011

Может быть, это то, что вы ищете? Сначала вам нужно прикрепить событие клика. тогда вы можете использовать триггер, чтобы запустить его.

<html>
<head title="jQuery Test">
    <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.7.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            $('#blah').click(function () {
                alert('clicked');
            });
            $('#blah').trigger('click');
        });
    </script>
</head>
<body>
    <a id="blah" href="#">BLAH</a>
</body>
</html>
0 голосов
/ 14 ноября 2011

Я просто догадываюсь относительно , почему команда jQuery решила реализовать вещи таким образом, поскольку я не в команде jQuery, но навигационный аспект тега привязки может быть вызван другимиПоведение пользовательского интерфейса, чем просто щелкнув мышью.Например, в простом старом javascript использование клавиатуры для активации элемента не запускает действие onClick, но будет запускать действие навигации тега привязки.

Другими словами,нажимая на ссылку, вы просто используете один из нескольких возможных механизмов для перехода к конечной точке, на которую указывает ссылка, но навигация и щелчок - это не одно и то же событие, поэтому jQuery решил обработать щелчок именно этим.

...