Изменение ссылок href после клика с помощью jQuery

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

Мой html:

<a href="#" onclick="location.href='http://google.com'; return false;" rel="group" data-wpurl="http://yahoo.com"></a>

При щелчке, я хотел бы, чтобы браузер перешел в местоположение data-wpurl, а не в href. Причина, по которой я использую атрибут data, заключается в том, что приложение, которое я использую, требует использования href... здесь не имеет значения.

Мой jQuery:

$('a[rel="group"]').on('click', function(e) {
      e.preventDefault();
      var wpurl = $(this).attr("data-wpurl");
      $(this).attr('href', wpurl);
});

Я использую e.preventDefault(); чтобы браузер не брал пользователя в href. После того, как атрибут data присваивается href, как я могу вызвать щелчок? Использование trigger('click') и click(); не работает!

Любые идеи?

Ответы

Ответ 1

Было бы проще сразу изменить местоположение:

e.preventDefault();
location.href = $(this).data('wpurl');

Ответ 2

Аналогичное решение, но без необходимости вызова e.preventDefault()

$('a[rel="group"]').on('click', function(e) {
    e.originalEvent.currentTarget.href = $(this).data('wpurl');
});

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

Ответ 3

Используйте onmousedown. Google использует этот метод на своей странице результатов поиска, чтобы отслеживать, что вы нажали. Если вы хотите увидеть, куда будет идти ссылка, щелкните правой кнопкой мыши вместо левой. Они оба запускают событие onmousedown.

http://jsfiddle.net/afLE3/

<a href="http://google.com" data-wpurl="http://yahoo.com" onmousedown="rwt(this)">CLICK HERE</a>

<script type="text/javascript">
  rwt = function(e){
    e.href = $(e).data('wpurl');
  }
</script>

Ответ 4

Я думаю, что ваш оригинальный jQuery в порядке, за исключением e.preventDefault(): это остановит запуск события, независимо от того, что вы делаете с атрибутом href после этой точки.

$('a[rel="group"]').on('click', function(e) {
      var wpurl = $(this).attr("data-wpurl");
      $(this).attr('href', wpurl);
});

Все приведенные выше коды будут выполняться до обновления страницы.