Я уверен, что это проблема закрытия области или итератора, но я просто не могу заставить ее работать.Заранее извиняюсь, если это невероятно очевидное исправление.
Это пользовательский тег HTML в GTM.Идея состоит в том, чтобы прослушать события отправки формы WPCF7 (контактная форма WordPress 7) и передать соответствующее событие в GTL dataLayer.
//Event listener array
var listeningEvents = [
["wpcf7mailsent","CF7formSubmitAndSent"], //Mail sent successfully
["wpcf7submit","CF7formSubmit"], //Form submitted
["wpcf7spam","CF7formSpam"], //Form spam
["wpcf7invalid","CF7formInvalid"], //Form invalid
["wpcf7mailfailed","CF7formMailFail"] //Form fail
];
//Loop through event listener array & action
for( var i = 0; i < listeningEvents.length; i++){
document.addEventListener( listeningEvents[i][0],
(function(i, event, listeningEvents) {
dataLayer.push({
'event' : listeningEvents[i][1]
});
})()
);
}
Я отлаживал с console.log непосредственно перед dataLayer.push,listenEvents [i] [1] внутри addEventListener выглядит как неопределенное.
Я попытался выполнить несколько советов здесь: https://www.pluralsight.com/guides/javascript-callbacks-variable-scope-problem
Но я продолжаю получать неопределенную ошибку.
Я действительно не хочу добавлять прослушиватель событий отдельно 5 раз.Я действительно хочу иметь возможность расширить список прослушивателей событий для дальнейшего сопровождения.
[EDIT]
Я думаю, что нашел рабочее решение здесь: https://arstechnica.com/civis/viewtopic.php?f=20&t=138763
var stuff = ['a', 'b', 'c'];
for(var i=0; i<stuff.length; i++)
{
var closureMaker = function(line) {
return function(event){ alert(line); };
};
var closure = closureMaker( stuff[i] );
addEventListener('click', closure, false);
}
$ я больше не был моей проблемой - он обращался к моему глобальному массиву из addEventListener.