【问题标题】:Unable to pass a value from a function to a data layer array using javascript无法使用 javascript 将值从函数传递到数据层数组
【发布时间】:2016-09-13 17:53:07
【问题描述】:

我正在尝试在下面的 HTML 中收集值(显示 1 -10 of 74)

<body>
<p data-brackets-id="1217" class="search">

                <!--No Results Found-->
                <small data-brackets-id="1218" data-bind="visible:(searchResults().length == 0), html: translations.noResults" style="display: none;">No Results To Display Please Enter A Search Term Above</small>

                <!--Error Message-->
                <small data-brackets-id="1219" class="error-message" data-bind="visible:errorMessage, html:errorMessage" style="display: none;"></small>

                <!--Search Result Count-->
                <small data-brackets-id="1220" data-bind="html:currentlyShowing, visible:(searchResults().length > 0)">Showing 1 -10 of 19300</small>
            </p>
</body>

使用 window.onload 函数

/** * 在页面加载后返回“Showing 1 -10 of 19300”的文本并将值传递给 dataLayer。 */

function showing () {
    var showResults = document.querySelector(".search small :nth-child(3)").innerHTML;
}

window.onload = showing;

并传递给 dataLayer 对象(搜索结果),以便谷歌分析可以从 dataLayer 中获取值。

<!-- start dataLayer -->
<script>
    var adobeInfo = {
            pageInfo: {
                'pageType': "welcome page",
                'Search Results': showResults
            }
    }

  <!-- end dataLayer -->

但是我似乎无法将 querySelector 的值传递给 dataLayer,因为我不断得到“未定义”。是 windows.onload 不允许我传递值还是我只是使用了错误的代码语法来完成这项任务?

提前感谢您的帮助。

<body>
<p data-brackets-id="1217" class="leader-1 no-trailer">
<!--No Results Found-->
<small data-brackets-id="1218" data-bind="visible:(searchResults().length == 0), html: translations.noResults" style="display: none;">No Results To Display Please Enter A Search Term Above</small>

<!--Error Message-->
<small data-brackets-id="1219" class="error-message" data-bind="visible:errorMessage, html:errorMessage" style="display: none;"></small>

<!--Search Result Count-->
<small data-brackets-id="1220" data-bind="html:currentlyShowing, visible:(searchResults().length > 0)">Showing 1 -10 of 74</small>
</p>

<script>  
function results () {
    alert(" alert inside results function");
    var showResults = document.querySelector("leader-1.no-trailer :nth-child(3)").innerHTML; // get the results of the showing info from search page.
    showResults.select();
}

window.onload = results();
</script>

  
<!-- Use dataLayer object to pass values to analytics -->

<script>
    var dataLayer = {
            pageInfo: {
                'pageType': "welcome page",
                'show Results': showResults // value of show results should go here (Showing 1 -10 of 74)
            }
         }
</script>

</body>

所以我想我真正的问题是如何将 window.onload 函数的值传递给全局变量,以便将其传递给我的 dataLayer?

【问题讨论】:

  • showResults 定义在哪里
  • 除此之外,您实际上并没有在任何地方引用 dataLayer...您是如何尝试与之交互的?
  • 请显示更多您的代码。仅通过此代码 sn-p 无法确定问题。
  • 您将results 函数(即undefined)的result 分配给window.onload 处理程序。
  • 好的,我修改了代码并将 javascript 和数据层添加到 html。我正在尝试提取页面加载后发生的 var "showResults" 的值并推送该值(显示 1 - 10 of 74) 到“显示结果”的数据层对象。抱歉,如果我感到困惑且不清楚。

标签: javascript data-layers


【解决方案1】:

datalayer 之外设置showResult 会使程序难以阅读和调试。我的建议是为data layer 定义一个加载器,如下所示:

var dataLayer = {
  pageInfo: {
    'pageType': "welcome page",
  },
  load: function() {
    this.showResults = document.querySelector("leader-1.no-trailer :nth-child(3)").innerHTML; // get the results of the showing info from search page.
    this.showResults.select();
  }
}


// windows onload event
windows.onload = function() {
  dataLayer.load();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 2015-07-01
    • 2021-06-03
    • 1970-01-01
    • 2014-07-02
    • 1970-01-01
    • 2018-07-07
    相关资源
    最近更新 更多