【问题标题】:How can I prevent a blank UTM value from being passed in a form submission?如何防止在表单提交中传递空白 UTM 值?
【发布时间】:2019-07-16 18:50:28
【问题描述】:

如果重要的话,我在 Pardot 工作,但有一些 javascript 会将 GA utm 参数写入隐藏字段。

不幸的是,如果任何值是空白的,它将传递该空白值,并覆盖任何现有值。 我能够覆盖现有值很重要,但前提是查询字符串中有数据。

是否可以改为写入默认值?例如,提交一个没有 utm_source 的表单,然后我们写 Source="Organic",或者类似的东西。

这是我的代码:

    <script type="text/javascript">
// Parse the URL
function getParameterByName(name) {
    name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
    var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
    results = regex.exec(location.search);
    return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}
// Give the URL parameters variable names
var source = getParameterByName('utm_source');
var medium = getParameterByName('utm_medium');
var campaign = getParameterByName('utm_campaign');
var campaign = getParameterByName('utm_content');

// Put the variable names into the hidden fields in the form. selector should be "p.YOURFIELDNAME input"
document.querySelector("p.source input").value = source;
document.querySelector("p.utm_medium input").value = medium;
document.querySelector("p.utm_campaign input").value = campaign;
document.querySelector("p.utm_content input").value = content;



</script>

非常感谢您的洞察力!

【问题讨论】:

    标签: javascript forms utm


    【解决方案1】:

    由于您将值 "" 设为空,并且由于在 javascript 中为 falsey,因此只需在 4 个值语句中的每一个之前放置一个 if 语句:

    if (source) document.querySelector("p.source input").value = source;

    在长格式中,您是说如果值存在,则用该值填充元素。否则,什么都不做:

    if (source) {
      document.querySelector("p.source input").value = source;
    }
    

    【讨论】:

    • 感谢您的帮助。我正在努力让它发挥作用。我讨厌听起来很天真,但是,我是。我错过了什么? if (source) document.querySelector("p.utm_source input").value = source; if (medium) document.querySelector("p.utm_medium input").value = medium; if (campaign) document.querySelector("p.utm_campaign input").value = campaign; if (content) document.querySelector("p.utm_content input").value = content;
    • 你在那里写的东西看起来不错,所以在更大的图景中一定有我们遗漏的东西。您确定您的函数getParameterByName 可以按预期工作吗?您可以链接到更完整的代码版本,例如将其放在 Pastebin 上吗? (在这样做之前删除任何专有信息)另外我重新阅读了您的原始帖子,您不小心定义了 var campaign 两次。
    • 我也发现了这一点并对其进行了更新。谢谢你。这是粘贴箱:pastebin.com/SPA376rx
    • 它对我有用。这是我为测试它所做的:从 utm_campaign 表单字段

      元素中删除“隐藏”类/类型标签,以便它们可见。我还将value 设置为“测试”,所以那里已经有一些东西了。然后我通过本地服务器运行 html 文件并添加查询字符串 ?utm_campaign=xxx 并点击该 URL,它显示为 xxx。我再次点击没有查询字符串的 URL,它显示“测试”,所以它没有用空白字符串覆盖它。你具体面临什么问题? (我还验证了您的原始帖子确实存在覆盖问题。)

    • 使用你的方法我可以看到它也对我有用。这告诉我这是一个平台问题,导致该值被覆盖。所以,在那种情况下,你帮了我很大的忙。我只需要了解为什么现有值会被平台覆盖。谢谢!
    猜你喜欢
    • 2017-01-23
    • 2015-08-10
    • 1970-01-01
    • 2014-03-26
    • 2022-08-18
    • 1970-01-01
    • 2012-05-26
    • 1970-01-01
    相关资源
    最近更新 更多