我认为这是一个真正的新手问题,非常感谢您帮助我学习。我正在按照步骤here实施客户端Google Analytics(分析)实验。

我一直在使用document.ready

$( document ).ready(function() {
  // Handler for .ready() called.
});


并且此处的说明对此建议(不带功能):

$(document).ready(
  // Execute the chosen view
  pageVariations[chosenVariation]
);


我想在实验之外的同一页面上调用其他一些函数,但是当我尝试将它们合并为一个document.ready时,Google Analytics(分析)实验将无法运行。所以我有两个问题:


什么时候不可以在document.ready中包含功能?查看文档here,我从来没有看到它没有功能就写过,所以我对此不太清楚
pageVariations[chosenVariation]添加到现有document.ready的正确方法是什么?我尝试将其添加到我的代码中,如下所示,但该实验仅在其位于自己的单独document.ready中时才有效。

        <script>
            var chosenVariation = cxApi.chooseVariation();
            var pageVariations = [
              function() {
                console.log('variation one');
              },
              function() {
                document.getElementById('hero').src = 'heroB.jpg';
                document.getElementById('oval').src = 'es_03b.jpg';
                console.log('variation two');

              }
            ];
            $(document).ready(function () {
                pageVariations[chosenVariation];
                about();
                truck();
                $("#vid").click(function() {
                    $.fancybox({
                        autoSize: false,
                        inline:true,
                        height: 456,
                        width: 700,
                        href:"#cab"
                        });
                    });
            });
        </script>

最佳答案

什么时候不可以在document.ready中包含功能?看着
  这里的文档,我从来没有看到它没有功能
  所以不是我不清楚


$(document).ready(function(){
   // Something here
});




var a = function() {
   // Something here
};
$(document).ready(a);


要么

$(function(){
   // something here
});


是完全一样的东西。

简而言之,只要第一个参数是一个函数(无论是否引用),就可以通过外部变量加载它。

需要说明的是:在第一种情况下(和第三种情况下),您使用匿名函数,而在第二种情况下,您通过变量引用了函数。

您通过以下方式在自己的情况下正在做什么:

// Wait for the DOM to load, then execute the view for the chosen variation.
$(document).ready(
  // Execute the chosen view
  pageVariations[chosenVariation]
);


与第二点(具有变量a的点)基本相同,但不是通过变量引用它,而是通过数组引用它。

接下来,大约几秒钟,因为您位于函数内部并且没有引用它,所以应该执行该函数以使其起作用,所以,而不是:

$(document).ready(function(){
    pageVariations[chosenVariation];
            about();
            truck();
            $("#vid").click(function() {
                $.fancybox({
                    autoSize: false,
                    inline:true,
                    height: 456,
                    width: 700,
                    href:"#cab"
                    });
                });
});


更换:

pageVariations[chosenVariation];


带有:

pageVariations[chosenVariation]();


编辑:

正如上面的Ted所指出的,同时进行多个文档就绪调用也很好,因此,如果您遇到麻烦,还可以执行以下操作:

$(document).ready(
  // Execute the chosen view
  pageVariations[chosenVariation]
);

$(document).ready(function(){
   // The rest of your code here
});

关于javascript - 具有/不具有功能的Document.ready,并向现有代码添加数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31030840/

10-13 09:29