2016-10-20 2 views
0

사용자가 양식을 제출하려고 시도했지만 누락되었거나 유효하지 않은 입력란을 표시 할 때 유효하지 않은 것으로 표시된 입력란의 데이터를 다시 제공하는 태그 관리자에 태그가 있습니다. Google 태그 관리자 DataLayer allways Push

다음 코드를 사용하여 수행됩니다 :

// Get user Agent 
 
    var Uagent = navigator.userAgent; 
 
         
 
    // Validation Errors Check 
 
    document.getElementById("btnSubmit").onclick = function() { 
 
    errorLoop(); 
 
} 
 

 
function errorLoop() { 
 
    var runner = document.getElementsByClassName("invalid"), 
 
     formEmail = document.getElementById('email').value, 
 
    dataL = []; 
 
    dataLayer.push({'formEmail' : formEmail}); 
 

 
    if (runner) { 
 

 
    for (var i = 0; i < runner.length; i++) { 
 
     var errName = runner[i].getAttribute("name"), 
 
     errId = runner[i] 
 
     .getAttribute("id"); 
 

 
     dataL.push("Field: " + errName + " - ID: " + errId); 
 
    } //End for 
 

 
    dataL.toString(); 
 
    var vadout = dataL + " Device: " + Uagent; 
 
    
 
    console.log(dataL); 
 

 
    dataLayer.push({ 
 
     'formEmail' : formEmail, 
 
     'validationError': vadout, 
 
     'event' : 'errorpush' 
 
    }); 
 

 

 
    } //End if 
 
} //End errorLoop

그래서 무슨 기본적으로 여기에서 일어나고있는 것은 우리가 모든 필드는 클래스가 있는지 확인하기 위해 양식을 확인하는 제출에 invalid &이면 필드 이름을 &으로 추가 한 다음 인쇄하여 배열을 데이터 레이어에 인쇄합니다.

태그 자체는 errorpush이라는 사용자 지정 이벤트를 사용하여 트리거됩니다.

문제는 아직 많은 사람들이 유효성 검사 오류를 얻는 시간의 약 80 %에 불과하지만 유효성 오류로 인해 데이터 계층 및 Google 애널리틱스로 돌아 가지 않는 것으로 보입니다.

나는 datalayer push에 지연 시간을 추가하여이 문제를 일으킬 수있는 박쥐를 알 수있는 사람이 있는지 알고 싶었습니다.

답변

0

클래스 이름이 "유효하지 않은"요소가없는 경우 러너가 빈 배열로 선언됩니다. 그러나 if 문은 선언 만 검사합니다.

항상 유효하지만 "유효하지 않은"요소는 없습니다. 결과적으로 dataL.push("Field: " + errName + " - ID: " + errId);은 for 루프에서 실행되지 않지만 dataLayer.push은 실행되므로 오류없이 errorpush 이벤트가 발생합니다.

이 문제를 해결하기 위해, 나는 당신의 if 문을 다시 작성하는 것이 좋습니다 것입니다 :

if(runner.length > 0){ 

} 

을 나는이 방법으로 문제가 해결되기를 바랍니다.

+0

코드를 잘못 읽은 것 같습니다. Runner는 class invalid가 페이지에있는 경우에만 실행됩니다. 잘못된 클래스가 없으면 실행되지 않습니다. 그래서 당신이 제안한 것과 같은 잘못된 긍정적 인 부분은 절대 없습니다. 길이를 추가해도 아무런 변화가 없습니다. 추신. datalayer가 루프가 곧바로 시간 제한을 추가하여 문제를 해결할 것을 강요하는 것에 대한 나의 원래 가정에 대해 필자는이 질문에 스스로 답을해야만했습니다. – DCdaz

+0

아니요. 내 대답을 잘못 읽은 것 같습니다. if 문은 주자가 있는지 확인합니다. 러너를 빈 배열로 선언하면 (클래스 이름이 "invalid"인 요소가 없을 때) 빈 배열 varible로 계속 존재하므로 if 명령은 여전히 ​​실행됩니다. 콘솔에서 확인하고 내가 옳지 않은지 알려주세요. – Matus

+0

이미 확인했는데 아무런 영향을주지 않습니다. 문제는 루프가 처리되기 전에 데이터 계층이 GA로 이동한다는 것입니다. 내가 말했던 것처럼 이미 해결되었다. – DCdaz

관련 문제