有一种优雅的方式来暂时抑制jQuery事件吗?我使用这样的代码:
$(element).unbind(event, function1).unbind(event, function2);
// code for which the event is suppressed
$(element).bind(event, function1).bind(event, function2);
Run Code Online (Sandbox Code Playgroud)
但我发现它有点笨拙,并且对很多事件来说都不是很容易扩展.为什么我要暂时压制事件?我使用BlockUI插件在Ajax访问期间阻止UI.这是通过BlockUI提出的:$().ajaxStart($.blockUI).ajaxStop($ .unblockUI)来完成的.
但是,一个Ajax访问是特殊的,所以我需要一个不同的消息.ajaxStart和ajaxStop事件会干扰消息代码(不显示任何内容):
function message(text, callback) {
if (text == undefined) {
$.unblockUI();
return;
}
// $().unbind('ajaxStop', $.unblockUI).unbind('ajaxStart', $.blockUI);
$("#message_text").html(text);
$.blockUI({message: $("#message")});
$("#message_ok").click(function() {
// $().bind('ajaxStop', $.unblockUI).bind('ajaxStart', $.blockUI);
$.unblockUI();
if (callback != undefined) callback();
});
}
Run Code Online (Sandbox Code Playgroud)
只有当我取消注释unbind()和bind()行时,它才有效.
我有一个使用Google Analytics更新的异步跟踪方法(_gaq)的网站.我遇到的问题是我想建立一些特定的链接跟踪,并担心我会创建一个竞争条件.
基本上,它是一个新闻网站,所以它有标题链接到各地的故事.故事的标题可能出现在页面上的3个不同位置,并出现在数百个其他页面上.因此,为了理解我们的受众如何与网站进行交互,我们必须跟踪每个特定标题块的使用方式,而不仅仅是目的地.由于这两个规定跟踪单个页面,跟踪引用页面是不够的,我们必须跟踪单个链接.
所以,如果我有一个链接.
<a href="http://www.blah.com" onclick="_gaq.push('_trackEvent','stuff')">Here</a>
Run Code Online (Sandbox Code Playgroud)
因为_gaq.push()是异步调用,所以在Google完成点击跟踪之前是否可能发生页面更改?如果是这样可以防止这种情况发生,或者我对Google AnalyticsAsync的运行方式存在误解(http://code.google.com/apis/analytics/docs/tracking/asyncUsageGuide.html).
我希望使用事件跟踪来记录对另一个网站的特定链接类型的点击.我正在使用jQuery,我目前的代码是:
$('a.website').click(function(event) {
var href = $(this).attr('href');
try {
_gaq.push(['_trackEvent', 'website', 'click', href]);
} catch(err) {}
});
Run Code Online (Sandbox Code Playgroud)
然而,从其他网站看到引荐信息后,我也不敢相信这是准确跟踪点击,可能是因为_gaq.push是异步的,并请求的浏览器导航到URL之前尚未收到,并终止任何JavaScript的运行当前页面.
有没有办法检测到该_gaq.push功能是否已成功完成,所以我可以在记录事件后使用event.preventDefault()和document.location导航到该链接?
我们正在尝试跟踪网页上的各种点击事件,以了解用户如何浏览我们的网站.
可以通过不同的链接到达给定页面(例如,通过原始页面顶部的链接与页脚中的链接).因此,仅仅跟踪加载的目标页面是不够的; 我们需要标记和跟踪点击事件.
Google Analytics 文档建议为"出站链接"的点击添加100毫秒的延迟,以便在加载链接目标之前完成跟踪代码.这是因为_gaq.push(['_trackEvent', category , action])代码是异步的,在卸载页面之前需要时间来完成吗?
如果是这样,"现场"链接是否也不需要这样做?我没有看到这与链接到同一网站上的新页面有何不同; 在这两种情况下,当前页面都被卸载.
编辑:我之后发现了Google hitCallback通过回调触发页面加载事件的机制.这消除了使用延迟的需要.