js jquery前进保存的事件

时间:2011-03-19 17:14:54

标签: javascript jquery events dom

我在超链接上阻止了一些我的原生点击事件,以检查结果页面是否包含内容。

我保存了jquery事件对象,经过一些检查后,我想让事件以自然的方式进行。

  • 捕获事件
  • 检查内容
  • 如果内容可用
    • 正在解雇的前进事件
  • 否则
    • 不要

此时,我只保存"href"属性,并希望如果true返回则将其设置为document.location.href

现在,问题是:除了将href设置为document.location.href之外,是否有更好的方法来转发/重新加注现有事件?

2 个答案:

答案 0 :(得分:1)

这听起来像是jQuery Deferred对象的工作。 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函数的解析/成功状态。您告诉您的点击事件要等待,因为done正在使用Deferred对象,并承诺返回一些内容。

如果内容已加载,我已经按setInterval检查每50毫秒,然后我resolve延迟对象,因此将调用点击事件中的then

您可以将对象传递给dfd.resolve();,例如dfd.resolve({ test: true });。然后,o中的then参数将为o.test

我已多次使用Deferred,我非常喜欢它。

希望这有帮助

答案 1 :(得分:1)

使用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();
  });
};