Javascript 我在使用google tag manager时遇到了多个具有相同id的表单的问题

Javascript 我在使用google tag manager时遇到了多个具有相同id的表单的问题,javascript,google-tag-manager,Javascript,Google Tag Manager,您好,我有许多表单在多个页面中所有这些表单都具有相同的id(成功消息)提交后,相同的类名当我发送的表单时,例如在主页内我将元素选择器通过id与页面路径与匹配正则表达式类似的\/(en | es)\/它工作正常,没有问题。。。但是,当我进入页面www.something.com/send something/233?search=profile时,我试图注入定制javascript,比如: function() { var els = document.querySelectorAll('#s

您好,我有许多表单
多个页面中
所有这些表单都具有相同的id(成功消息)提交后,
相同的类名
当我发送的表单时,例如主页内我将元素选择器通过id与页面路径匹配正则表达式类似的
\/(en | es)\/
它工作正常,没有问题。。。但是,当我进入页面
www.something.com/send something/233?search=profile
时,我试图注入定制javascript,比如:

function() {
  var els = document.querySelectorAll('#sendReqSurgyForm1');
  for (var i = 0; i < els.length; i += 1) {
    if (els[i] === {{Page URL}}) {


        return i;
    
      
    }
  }
  return '(nothing sent)';
}
function(){
var els=document.queryselectoral('sendReqSurgyForm1');
对于(变量i=0;i
通过向https:\/\/www.something\.com\/(ar | en)\/发送某物\/[0-9]+\?source=[a-zA-Z]+\\[a-zA-Z]+

要匹配url:www.something.com/send something/233?search=profile


触发器始终适用于主页,但位于
www.something.com/send something/233?search=profile
的触发器不成功,javascript的结果始终返回
未发送
。。请帮助解决此问题

您好,答案是使用SPA,因此它可以是具有相同组件的多个表单,因此我通过为每个具有不同URL的表单设置id解决了此问题 例如,如我在主主题问题中所述,如果在多个路由页面中有多个表单。。要解决此问题,您可以通过js为每个表单提交设置id,方法是为每个表单提交设置新的
id
,为基于id的不同URL设置属性

main\u id=exampleForm

function(){

var ids = document.getElementById("exampleForm");//main id

var current_url = window.location.href;//current url of visitor

var dir_match = location.pathname+location.search;//the path of website after .com
var send_req = 'https://www.example.com/'+dir_match.match(/[ar][r]|[en]n/)+'/surgery-request/'+dir_match.match(/[0-9]+/)+'?source=profile';//link1 which have form1
var send_req2 = 'https://www.example.com/'+dir_match.match(/[ar][r]|[en]n/)+'/surgery-request/'+dir_match.match(/[0-9]+/)+'?source=profile2';//link2 which have form2
var home_url = 'https://www.example.com/'+dir_match.match(/[ar][r]|[en][n]/)+'/';//link3 which have form3
if(current_url == send_req){
    /* if current_url equal to link1 set new id e.g =  `forms_req_surgery` */
    last_send_req = ids.setAttribute("id", "forms_req_surgery");
    var elm = document.getElementById('forms_req_surgery');
    var last_var = elm.id;/* get the name of id */
    return last_var; // return the name of id after changed set 
}else if(current_url == home_url){
    last_home_url = ids.setAttribute("id", "home_req");
    var elm2 = document.getElementById('home_req');
    var last2_var =  elm2.id;
    return last2_var;
  }else if(current_url == send_req2){
    last_send_req2 = ids.setAttribute("id", "forms_req_surgery2");
    var elm3 = document.getElementById('forms_req_surgery2');
    var last3_var =  elm3.id;
    return last3_var;
  }

}
  

您不能有重复的ID<代码>id在任何时候每页都必须是唯一的。@connexo我使用的是angular,所以我在多页中使用相同的组件(表单)。只要您确保一页上不存在多个具有相同<代码>id值的元素,没问题。我正在尝试获取网页周围具有相同id的所有表单,然后检查
当前url==={{{Page url}}
是否开始执行与
页面url
内的模式匹配的触发器。。注意:
Page URL
是gtm中存在的一个内置变量,用于与regex或任何其他函数匹配。您好,角度组件是否需要配置或添加回调函数。如果是,您可以在其上添加数据层片段以获取表单信息。