为什么我的函数在我的Ajax事件之后或者(文档).ready之后不会被调用?

时间:2014-01-27 12:46:19

标签: javascript jquery html ajax

我有一个名为embedAmplienceModules()的javaScript函数,它位于一个外部js文件中,需要在我们的网站上调用某些名为“amplience-module”的促销横幅。这个javaScript支持在名为Amplience的第三方合作伙伴内创建的这些横幅上的功能,如幻灯片,数字目录,生活方式图像上的热点链接,直接链接到产品等。

在发生两个事件之一后,需要加载此脚本:

  1. 单击侧面导航中的类别选项,通过Ajax刷新页面内容。
  2. 单击横幅,该横幅链接到导致页面刷新的类别页面。
  3. ISSUE: 问题是,我的脚本通过上面的选项1而不是选项2成功加载。它只加载脚本一次。因此,如果我有三个Amplience促销横幅,则脚本仅加载最后一个。我已经尝试将调用包装到embedAmplienceModules()内的(document).ready函数中,但这不起作用。

    在另一个用于所有全局站点j的外部javaScript文件中,我们有一个Ajax事件处理程序,其中是对embedAmplienceModules()函数的调用,该函数在Ajax事件/刷新后正常工作。

    以下是javaScript文件的内容。对此文件的调用位于网站的<head>标记内。

    function embedAmplienceModules() {
    
    $('.amplience-module').each(function() {
    
        var divId = $(this).attr('id'); // div id eg.'amp-m1-area'
        var ampId = $(this).data("ampid"); // Pulls amp id eg. 'eba2d785-f2c1-494f-8f92-b3d95dff80f8' from 'data-ampid' attribute in contentmodules.html template
        var ampDimWidth = $(this).data("ampdimwidth"); // Pulls amp module width eg. '747' from 'data-ampdimwidth' attribute in contentmodules.html template
        var ampDimHeight = $(this).data("ampdimheight"); // Pulls amp module height eg. '241' from 'data-ampdimheight' attribute in contentmodules.html template
        var ampBaseDir = $(this).data("ampbasedir"); // Pulls player file path from 'data-ampbasedir' attribute in contentmodules.html template
        var options = { 
            target: divId,
            width: ampDimWidth,
            height: ampDimHeight,
            vars: {id: ampId, resolveJSPath:"true"},
            params: {allowScriptAccess: "always", base: ampBaseDir, deepLinking:"false",wmode: "transparent"},
            src: [
              {type:"html5", src: ampBaseDir+"tcplayer.js", xd: [ampBaseDir+"xd.html"]},
              {type:"swf", src: ampBaseDir+"tcplayer.swf",version:"9.0.0"}
          ]
        };
    
        options = $.extend(options);
    
        interact.embedApp(options);   // the actual Amplience library call
    
        $(this).removeClass("amplience-module"); // remove the amplienceModule class so this does not get run again for this module later. Must have this. 
    
    });
    
    }
    

    这是html,它使用data-XXX属性根据特定Amplience横幅的后端输入的详细信息存储相应的信息。我在这里删除了一些条件值,以便更容易理解。这些是根据输入到后端的值对类别进行的。

    <div id="amp-m1-area" class="amplience-module" data-ampid="eba2d785-f2c1-494f-8f92-b3d95dff80f8" data-ampdimwidth="241" data-ampdimheight="241" data-ampbasedir="path/to/amp/directory"></div>
    

    装货单是:

    1. 包含我的embedAmplienceModules()功能
    2. 的文件
    3. 内容,即包含数据的HTML-XXX atts
    4. 包含对Ajax事件的embedAmplienceModules()函数调用的全局js文件
    5. 有关此功能无法加载的任何想法(文档).ready?

      **答案** 我删除了'options = $ .extend(options);'线,它工作!

1 个答案:

答案 0 :(得分:0)

我删除了&#39; options = $ .extend(options);&#39;线,它工作!