我在超链接上阻止了一些我的原生点击事件,以检查结果页面是否包含内容。
我保存了jquery事件对象,经过一些检查后,我想让事件以自然的方式进行。
此时,我只保存"href"
属性,并希望如果true返回则将其设置为document.location.href
。
现在,问题是:除了将href设置为document.location.href
之外,是否有更好的方法来转发/重新加注现有事件?
答案 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();
});
};