Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当函数第一次运行时,将JS函数的结果存储在变量中-Google标记管理器_Javascript_Google Tag Manager - Fatal编程技术网

Javascript 当函数第一次运行时,将JS函数的结果存储在变量中-Google标记管理器

Javascript 当函数第一次运行时,将JS函数的结果存储在变量中-Google标记管理器,javascript,google-tag-manager,Javascript,Google Tag Manager,我正在尝试为Google Tag Manager创建一个自定义JavaScript变量,但我似乎无法让函数以正确的顺序运行 (如下所示:) 这是一段代码,用于检查电子邮件表单是否填写正确。ValidateForm()在用户输入姓名和电子邮件地址并点击“发送”按钮时运行(函数EmailCheck检查电子邮件地址是否有效)。ValidateForm随后将返回true或false。当ValidateForm的计算结果为true且用户点击“发送”按钮时,我想向Google Analytics发送一个事件

我正在尝试为Google Tag Manager创建一个自定义JavaScript变量,但我似乎无法让函数以正确的顺序运行

(如下所示:)

这是一段代码,用于检查电子邮件表单是否填写正确。ValidateForm()在用户输入姓名和电子邮件地址并点击“发送”按钮时运行(函数EmailCheck检查电子邮件地址是否有效)。ValidateForm随后将返回true或false。当ValidateForm的计算结果为true且用户点击“发送”按钮时,我想向Google Analytics发送一个事件

我的方法是尝试在第一次运行ValidateForm时将其结果存储在一个变量中,这样我额外的匿名函数将计算为true,但我似乎无法正确获得语法,现在我怀疑这是否可能(?)

我的另一个想法是只在onload上运行匿名函数,但这永远不会计算为true,因为在用户输入其详细信息并点击“发送”按钮之前,ValidateForm不会运行。。。我怎样才能做到这一点?感谢您的帮助:)


从你的问题来看,我认为你基本上想要验证你的表单。要完成这一部分,我只需要使用一个标准的定制HTML标记,它在页面加载时启动(可能是DOM就绪)。如果您希望能够在提交有效(或无效)表单时触发某些标记,则应根据需要将自定义事件推送到数据层

您可能需要执行以下操作,使用以下代码创建一个新的自定义HTML标记。此代码将函数绑定到表单的“提交”事件:

    $('#myform').on('submit', function(){
      function ValidateForm(){
        var emailID = document.cpren.email;
        if ((emailID.value == null) || (emailID.value == '') || EmailCheck(emailID.value) == false) {
          alert('Please enter a valid email address');
          emailID.focus();
          dataLayer.push({'event':'form-submitted', 'status':'fail', 'error':'invalid email'});
          return false;
        }else{
          dataLayer.push({'event':'form-submitted', 'status':'success'});
          return true;
        }
      }
    });
使用此代码,您总是在数据层中获得一个自定义事件来告诉您何时提交了表单,然后数据层项目会告诉您提交的状态,如果提交失败,还会显示一个错误代码


然后,您可以构建一个触发器来触发表单提交事件,并填充变量以了解状态,然后相应地触发标记。

我发现GTM中自定义javascript变量的问题是,它们在页面加载的所有阶段都会执行。不仅仅是在您希望执行它们的触发器上,甚至不能设置它们的执行顺序。 因此,我认为您需要重新评估您的方法

    $('#myform').on('submit', function(){
      function ValidateForm(){
        var emailID = document.cpren.email;
        if ((emailID.value == null) || (emailID.value == '') || EmailCheck(emailID.value) == false) {
          alert('Please enter a valid email address');
          emailID.focus();
          dataLayer.push({'event':'form-submitted', 'status':'fail', 'error':'invalid email'});
          return false;
        }else{
          dataLayer.push({'event':'form-submitted', 'status':'success'});
          return true;
        }
      }
    });