我正在编写一些JavaScript代码以对超链接执行跟踪。基本上,如果您单击链接,它将触发对另一个系统的跟踪。
但是,我只希望在第一次点击时触发跟踪。
此刻,我的事件处理程序会在每次点击时触发,而我只希望它触发一次。
使用下面的代码,我正在使用while loop
。这对第一个链接有效,但是这意味着当我单击其他链接时,我的事件处理程序不会启动...因此它完全停止运行。
不确定处理此问题的最佳方法。
我正在使用event.target
从链接上的aria-controls值中获取一个数字。只是在下面解释我在做什么:
var apples = object.apples;
var click = 0;
function sendTrackingData(event) {
if (event.domEvent.target.hasAttribute("aria-controls")) {
// Grab the value of aria-controls attibute
var buttonAriaControlValue = event.domEvent.target.attributes["aria-controls"].value;
//Only send report on the first click click
while (buttonAriaControlValue && click < 2) {
click++;
//Take the last number of the value
var number = buttonAriaControlValue.charAt(buttonAriaControlValue.length-1);
var integer = parseInt(number);
var final = integer + 1
reportingService.sendReport({}, 'ClickReport', 'The value is: ' + final + ' of ' + apples);
}
}
}
fruitLinks.onDOMEvent('click', sendTrackingData);
答案 0 :(得分:0)
如果您希望每个链接都可以单击一次,则不能使用全局变量(单击)。
这是一种简单的方法,您只需要更改两条注释行
function sendTrackingData(event) {
let target = event.domEvent.target;
if ( target.attributes['stopTrack'] ) return;
target.attributes['stopTrack'] = Date.now();
//let trackValue = 343; // Take it from some target.attritues
//let type = 'apple'; // Take it from some target.attritues
reportingService.sendReport({}, 'ClickReport', 'The value is: ' + trackValue + ' of ' + type);
}
fruitLinks.onDOMEvent('click', sendTrackingData);