Використовуйте AJAX, а потім перейдіть за посиланням

I am having an issue with processing an AJAX function in jQuery and then following a link. I have a function that runs on ANY click on a page like jQuery('body').live('click', function(event) {});

Ця подія може бути або не бути посиланням. У рамках цього зворотного виклику я маю щось на зразок jQuery.post (); . Отже, в будь-який час подія кліків відбувається в будь-якому місці тіла, в якому він працює. Моя проблема виникає, коли цей клік - це посилання або якийсь розділ у межах посилання. Я пробував такі речі:

event.preventDefault ();

слідує

if (довжина jQuery (event.target) .attr ('href')) {             var url = jQuery (event.target) .attr ('href');             window.setTimeout (function() {document.location.href = url;}, 1000);//тайм-аут і очікування, поки ефект не буде завершено         }

але проблема з цим полягає в тому, що якщо у вас є щось на кшталт <div> </div> , це не спрацює. Моє запитання ....

Чи існує надійний спосіб призупинити послідовне посилання, обробляти AJAX, а потім відновити посилання на це посилання?

2
Просто знайдіть найближче посилання. Для отримання детальної інформації див цей текст повідомлення .
додано Автор Dave Newton, джерело
// вилучено через німих коментарів.
додано Автор Ryan, джерело
Ось що він мав на увазі =). І я просто протестував, і це чудово працює. Я видалив мій коментар вище, коли зрозумів це. Але, якщо хтось це прочитає, я видалив "a" у наведеному вище коді. Дякую всім!
додано Автор Ryan, джерело
Я думаю, що він мав на увазі jQuery (event.target) .closest ('a'). Attr ('href'). Довжина) {var url = jQuery (event.target) .closest ('a'). Attr 'href'); window.setTimeout (function() {document.location.href = url;}, 1000);//час очікування і очікування, доки ефект не буде завершено} . Здається, він повинен працювати для вас.
додано Автор weir, джерело

4 Відповіді

Одне рішення:

$("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);
});
1
додано

Це буде рубати, але, схоже, ви можете змінити всі цілі посилання на "#", а потім створити інший атрибут із реальною цільовою. Захоплення подію кліків, обробка його, а потім обробка реальної цілі. Ви повинні мати можливість це робити з коду jQuery/JavaScript без редагування вашого фактичного html.

0
додано
Не просто рубати, звірість;)
додано Автор Dave Newton, джерело
Я не можу це зробити, тому що я не контролюю саму сторінку. Це використовується у WP-плагіні, і я намагаюся зберегти його як можна більш загальним.
додано Автор Ryan, джерело

Якщо ви виконуєте затухання (наприклад), ви можете перейти за цим посиланням за допомогою зворотного виклику. Але будьте впевнені, що повернете false з вашого обробника onclick, або ви будете плавати відразу:

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

І, нарешті, називайте це:

Click Me
0
додано

Вирішити помилку щодо jQuery (event.target) .closest ('a'). Attr ('href'). Довжина невизначена . Просто додайте цей рядок коду у рядку 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
додано