js jquery forward сохраненное событие - PullRequest
0 голосов
/ 19 марта 2011

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

Я сохраняю объект события jquery, и после некоторых проверок я хочу, чтобы событие прошло естественным путем.

  • Событие захвата
  • Проверка содержимого
  • Если доступно содержимое
    • событие пересылки при его запуске
  • else
    • do nothin

В данный момент я просто сохраняю свойство "href" и хочу установить его в document.location.href, еслиправда возвращается.

Теперь вопрос: Есть ли лучший способ переадресовать / ререйзировать существующее событие, чем установить для href значение document.location.href?

Ответы [ 2 ]

1 голос
/ 19 марта 2011

Использование document.location.href было бы хорошо, а также мне кажется самым простым вариантом.

Но просто для того, чтобы изучить другие варианты, вы также можете попросить js щелкнуть ссылку для вас, если она считается безопасной. Например, что-то вроде этого.

$('a').click(function() {
  if( !$(this).is('.content-verified') ) {
    var self = this;
    // Do your content checking here, with the callback for verified good
    // content being $(self).has_good_content();
    return false;
  }
  return true;
});

// Callback for good content
// should be something like this:
$.fn.has_good_content = function() {
  return $(this).each(function() {
    $(self).addClass('content-verified');
    $(self).click();
  });
};
1 голос
/ 19 марта 2011

Это звучит как работа для отложенного объекта jQuery.Новое в jQuery 1.5 +

function done() {
    var dfd = $.Deferred(),
        timeout;

    timeout = setInterval(function() {
        if (contents available) {
            clearInterval(timeout);
            return dfd.resolve();
        }
    }, 50);

    return dfd.promise();
}

$('#my-link').bind('click', function(e) {
    e.preventDefault();
    var $this = $(this);
    $.when(done())
        .then(function(o) {
            //unbind the click event that prevents the default action and click on the link afterward
            $this.unbind('click').click();
        });
});

Итак, все, что происходит, - это ожидание состояния разрешения / успеха из функции done.Вы сообщаете своему событию click, что нужно ждать, потому что done использует отложенный объект и пообещал что-то вернуть.

Я поставил setInterval, чтобы каждые 50 миль проверять, загружено ли содержимое, затемresolve Отложенный объект, поэтому будет вызываться событие then в клике.

Вы можете передать объект в dfd.resolve();, например, dfd.resolve({ test: true });.Тогда аргумент o в then будет иметь o.test.

Я использовал Deferred несколько раз, и мне очень понравилось.

Надеюсь, это поможет

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