Document.ready有/无功能,并向现有代码添加数组

时间:2015-06-24 15:32:49

标签: javascript jquery google-analytics

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

我一直使用document.ready像这样

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

此处的说明推荐此项(不含功能):

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

我想在实验之外的同一页面上调用其他一些功能但是当我尝试将它们合并到一个文档中时,谷歌分析实验将无法运行。所以我有两个问题:

  1. 什么时候可以不将功能包含在document.ready中?看一下文档here,我从来没有看到它没有函数写的所以我不清楚这个

  2. pageVariations[chosenVariation]添加到现有文档的正确方法是什么?我已经尝试将它添加到我的代码中,如下所示,但实验只有在它自己的单独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>
    

2 个答案:

答案 0 :(得分:0)

pageVariations对象的属性是函数。因此,在第一个示例中,它可以工作,因为您将引用传递给要在document.ready上执行的函数。在第二种情况下,在使用匿名函数的情况下,再次使用函数的引用,但不要将其赋值给变量,也不要执行函数。要执行后者,您需要使用括号 - ()来跟随调用。试试这个:

$(document).ready(function () { 
    pageVariations[chosenVariation]();
    // rest of your code...
});

答案 1 :(得分:0)

  

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

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

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

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

完全相同。

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

澄清:在第一种情况下(和第三种情况)你使用匿名函数,而在第二种情况下你通过变量引用一个函数。< / p>

您通过以下方式做的事情:

// 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
});