Используйте AJAX, а затем перейдите по ссылке - PullRequest
3 голосов
/ 28 октября 2011

У меня проблема с обработкой функции AJAX в jQuery и переходом по ссылке. У меня есть функция, которая запускается при ЛЮБОМ клике на странице типа jQuery('body').live('click', function(event) {});

Это событие может быть или не быть ссылкой. В этом обратном вызове у меня работает что-то вроде jQuery.post();. Таким образом, в любое время происходит событие щелчка в любом месте тела. Моя проблема возникает, когда этот щелчок представляет собой ссылку или какой-то div внутри ссылки. Я пробовал такие вещи, как:

event.preventDefault();

с последующим

if ( jQuery(event.target).attr('href').length ) { var url = jQuery(event.target).attr('href'); window.setTimeout(function(){document.location.href=url;}, 1000); // timeout and waiting until effect is complete }

но проблема в том, что если у вас есть что-то вроде <a><div></div></a>, это не будет работать. Мой вопрос ...

Существует ли надежный способ приостановить переход по ссылке, обработать AJAX, а затем возобновить переход по ссылке?

Ответы [ 4 ]

1 голос
/ 28 октября 2011

Одно решение:

$("a").live('click',function(e){
  e.preventDefault();
  var url = this.href;
  setTimeout(function(){
    location.href = url;
  },1000);
});

Мне просто интересно, повлияет ли это на любые другие плагины wordpress, которые могут иметь теги привязки с привязанными к ним событиями.

Изменить: Чтобы добавить к этому, вы также можете убедиться, что запрос находится на другой странице:

$("a").live('click',function(e){
  var url = this.href;
  if (url == location.href) {
    return;
  }
  e.preventDefault();      
  setTimeout(function(){
    location.href = url;
  },1000);
});
0 голосов
/ 02 апреля 2012

Для устранения ошибки около jQuery(event.target).closest('a').attr('href').length is undefined.Просто добавьте эту строку кода в строку 97 if ( jQuery(event.target).closest('a').attr('href')) { ..... Смотрите ниже, это исправляет ошибку:

    // Redirect if this is a link
    if ( jQuery(event.target).closest('a').attr('href')) {
        if ( jQuery(event.target).closest('a').attr('href').length ) {
            var url = jQuery(event.target).closest('a').attr('href');
            if ( jQuery(event.target).closest('a').attr('target') == '_blank') {
                window.setTimeout(function() 
                    { window.open(url, '_blank') },
                    window.name,
                    1000);
            } else {
                window.setTimeout(function(){document.location.href=url;}, 1000); // timeout and waiting until effect is complete 
            }           
        }
    }

В любом случае, отличный плагин:) ..

0 голосов
/ 28 октября 2011

Если вы выполняете затухание (например), вы можете перейти по ссылке с помощью обратного вызова. Но обязательно верните false из вашего обработчика onclick, иначе вы сразу перейдете:

function onclickCallback() {
    $("#myelement").fadeOut(500, function() {
        window.location.href = "http://example.com/mynewpage";
    });
    return false;
}

И, наконец, назовите это с:

<a href="#" onclick="onclickCallback()">Click Me</a>
0 голосов
/ 28 октября 2011

Это было бы хаком, но похоже, что вы могли бы изменить все свои цели ссылки на "#", а затем создать еще один атрибут с реальной целью. Поймайте событие щелчка, обработайте его, а затем обработайте реальную цель. Вы должны быть в состоянии сделать все это из кода jQuery / JavaScript без редактирования вашего фактического HTML.

...