Задать вопрос
@S_plean

Как сделать обнуление глобальной переменной из функции?

Добрый день.
Есть скрипт собирающий события мыши (координаты, клики, скроллы горизонтальный и вертикальный).
Объявляю глобальную переменную массив listClick.
Далее в одной функции этот массив наполняется ассоциативными массивами (словарями событий кликов). Функция срабатывает на событие клика ( document.addEventListener('click', function() {clickTracker(te='cl');}); ).
В другой функции, срабатывающей по таймеру ( setInterval(PushAllArray, 5000) ), этот массив (listClick) складывается в другой словарь (allEvent), и после этого должен обнулиться, но этого не происходит.
В отправленных событиях я вижу, что данные остаются, очень интересным для меня способом.
Например, в словаре allEvent сохранилось и отправилось 5 кликов, дальше делаю еще 2 клика и они затирают из этих 5 первые 2, но 3 остаются и определить их можно по дельте времени.

(function() {
	
	var listClick = [];
	var pos = { x: null, y: null, t:null };
	var posClick = { x: null, y: null };
	var st = +new Date();
	var be, dt, touch = null;

		function getPosition(e) {
		    var posx = 0;
	    	var posy = 0;

			  if (!e) var e = window.event;

			  if (e.pageX || e.pageY) {
			    posx = e.pageX;
			    posy = e.pageY;
		    }
		    else if (e.clientX || e.clientY) {
			    posx = e.clientX + document.body.scrollLeft
			            + document.documentElement.scrollLeft;
			    posy = e.clientY + document.body.scrollTop
			            + document.documentElement.scrollTop;
		    };

				posx = (posx - posx % 10)/10;
				posy = (posy - posy % 10)/10;
				dt = (+new Date) - st;
		    pos = { x: posx, y: posy, dt: dt };
				return pos
		};

		function clickTracker() {
			getPosition();
			if (!e) var e = window.event;
			button = e.which
			dt = (+new Date) - st;
			var targetClass = e.target.className;
			var targetTagName = e.target.tagName;
			var targetTagId = e.target.id;
			if (targetTagId != false) {
				elem = targetTagId;
			} else  if (targetClass != false) {
				elem = targetClass;
			} else if (targetTagName != false) {
				elem = targetTagName;
			} else {
				elem = 0;
			};
															  
			if (pos.x != null && pos.y != null) {
			    posClick = { "x": pos.x, "y": pos.y, "b": button, "te": te, "e": elem, "dt": dt };
            };
			listClick.push(posClick);
			return listClick;
		};

		function PushAllArray() {
			var allEvent = {'session': {'c':null}, 'spl':null};
			var session = {'c':null};
            //console.log('listClick', listClick)
			if (listClick.length != 0 && listClick != null) {
				allEvent['session']['c'] = listClick;
			};
			allEvent['spl'] = st;
  			if (allEvent['session']['c'] != null) {
                console.log(allEvent['session']['c'][0])    // сначала кликаем 2 раза на 2 разных элемента, они отображаются в консоли, 
                console.log(allEvent['session']['c'][1])    // через интервал времени кликаем 1 раз на другой элемент и он перетирает только первую запись. 
		        // tracker.send();  отправка на сервер.
                        // к сожалению из консоли все работает как надо, а при установке этого скрипта на сайт, работает как описано.
			};
			
			listClick.length = 0;
			// опробованные варианты обнуления
			// listClick = [];
			// в цикле listClick.pop
		};
		
		var timerPushAllArray = setInterval(PushAllArray, 5000);
		
		window.onbeforeunload = PushAllArray;

		document.addEventListener('click', function() {
			clickTracker(te='cl');
		});
})()


Вопрос в том как сделать так чтобы при итерациях по интервалу времени переменная listClick обнулялась?
Возможно я в целом что то делаю не так и надо в целом по другому сделать.
  • Вопрос задан
  • 239 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
SilenceOfWinter
@SilenceOfWinter
та еще зажигалка...
вообще Вы вроде верно написали listClick = []; , я хз что у Вас за версия js, как вариант сделать чтобы функция возвращала listClick и вызывать её listClick = clickTracker().
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы