首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跟踪按钮onclick事件

跟踪按钮onclick事件
EN

Stack Overflow用户
提问于 2015-12-16 00:43:38
回答 1查看 2.6K关注 0票数 1

我有一个脚本,跟踪传出链接时,链接是在一个<a>标记。

该脚本来自here

该脚本将跟踪标记或图像中的html。

我需要的是让它跟踪一个按钮,如下所示。

下面是我想我需要修改的代码:

代码语言:javascript
复制
    function clicktracker(e)
{
var ie  = navigator.appName == "Microsoft Internet Explorer";
var src = ie ? window.event.srcElement : e.target;
var tag =  (src.tagName.toLowerCase() != "a") ? src.parentNode : src;

if (!tag || tag.tagName.toLowerCase() != "a") return;

domain    = clicktracker_domain   (tag.href);
extension = clicktracker_extension(tag.href);

if ( clicktracker_inarray(clicktracker_domains, domain) &&
    !clicktracker_inarray(clicktracker_extensions, extension)) return;

var url   = tag.href;
var title = '';

if (!title) if (tag.tagName.toLowerCase() ==   "a") title = clicktracker_innertxt(tag.innerHTML);
if (!title) if (tag.tagName.toLowerCase() ==   "a") title = clicktracker_innertxt(tag.title);
if (!title) if (src.tagName.toLowerCase() == "img") title = clicktracker_innertxt(src.alt);
if (!title) if (src.tagName.toLowerCase() == "img") title = clicktracker_innertxt("Image");
url   = escape(url  .substr(0, 150));
title = escape(title.substr(0, 150));

if (url && title) setTimeout("clicktracker_aux('"+url+"', '"+title+"')", 10);
return;
}

这是我想要跟踪的按钮

代码语言:javascript
复制
<button type="button" title="title" style="background:#cda85c;" class="button btn-cart" onclick="window.open('http://www.example.com')"><span><span><?php echo $this->__('Buy Now') ?></span></span></button>

下面是完整的脚本:

代码语言:javascript
复制
function clicktracker_inarray (arr, val)
{
for (var i in arr) if (arr[i] == val) return true;
return false;
}

// ***** clicktracker_innertxt *****

function clicktracker_innertxt(str)
{
str = str.replace(/<[^>]*>/g, ' ');
str = str.replace(  /&amp;/g, '&');
str = str.replace( /&nbsp;/g, ' ');
str = str.replace(   /^\s+/g,  '');
str = str.replace(   /\s+$/g,  '');
return str;
}


// ***** URL *******************************************************************

var clicktracker_re_scheme = "^\\w+://";
var clicktracker_re_folder = "((?:-|\\w|\\.)*)";
var clicktracker_re_domain = clicktracker_re_scheme+       clicktracker_re_folder;
var clicktracker_re_urlall = clicktracker_re_domain+"(?:/"+clicktracker_re_folder+')*';

// ***** clicktracker_domain *****

function clicktracker_domain(url)
{
var reg   = new RegExp(clicktracker_re_domain);
var match = reg.exec(url);
if (!match) return "";
match = match[match.length-1];
return match;
}

// ***** clicktracker_extension *****

function clicktracker_extension(url)
{
var reg   = new RegExp(clicktracker_re_urlall);
var match = reg.exec(url);
if (!match) return "";
match = match[match.length-1].split(".");
return (match.length >= 2) ? match[match.length-1] : "";
}


// ***** Track *****************************************************************

// ***** clicktracker_aux *****

function clicktracker_aux(url, title)
{
var img = new Image();
img.src = clicktracker_url+"?url="+url+"&title="+title+"&rand="+Math.random();
}

// ***** clicktracker *****

function clicktracker(e)
{
var ie  = navigator.appName == "Microsoft Internet Explorer";
var src = ie ? window.event.srcElement : e.target;
var tag =  (src.tagName.toLowerCase() != "a") ? src.parentNode : src;

if (!tag || tag.tagName.toLowerCase() != "a") return;

domain    = clicktracker_domain   (tag.href);
extension = clicktracker_extension(tag.href);

if ( clicktracker_inarray(clicktracker_domains, domain) &&
    !clicktracker_inarray(clicktracker_extensions, extension)) return;

var url   = tag.href;
var title = '';

if (!title) if (tag.tagName.toLowerCase() ==   "a") title = clicktracker_innertxt(tag.innerHTML);
if (!title) if (tag.tagName.toLowerCase() ==   "a") title = clicktracker_innertxt(tag.title);
if (!title) if (src.tagName.toLowerCase() == "img") title = clicktracker_innertxt(src.alt);
if (!title) if (src.tagName.toLowerCase() == "img") title = clicktracker_innertxt("Image");
url   = escape(url  .substr(0, 150));
title = escape(title.substr(0, 150));

if (url && title) setTimeout("clicktracker_aux('"+url+"', '"+title+"')", 10);
return;
}


// ***** Attach Events *********************************************************

if (navigator.appName == "Microsoft Internet Explorer")
    document.attachEvent   ('onclick', clicktracker);
else document.addEventListener('click', clicktracker, false);

编辑*

然后,点击被存储在数据库中,并从php页面调用。

EN

回答 1

Stack Overflow用户

发布于 2015-12-16 00:55:04

这些脚本中有很多内容,并不清楚您所说的“跟踪”是什么意思,所以我只给出一个简短的版本:

代码语言:javascript
复制
document.addEventListener('click',function(e){
    var tag=e.target.tagName.toLowerCase();
    switch(tag){
        case "a":
            //use e.target to track this link event
            break;
        case "img":
            //use e.target to track this image event
            break;
        case "button":
            //use e.target to track this button event
            break;
    }
});

这将侦听页面上任何位置的点击,并使用e.target检查点击。

编辑:

e只是我为事件对象指定的名称,它由事件侦听器自动传递给函数。此对象中始终存在的属性之一是target,它包含有关事件的大量信息。如果你把console.log(e)放在上面的事件监听器的函数里面,你可以在Chrome中把它拉出来,点击control+shift+i,,转到javascript控制台,然后探索里面有什么。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34294768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档