0

我正在构建一个仅使用 Office365 客户端脚本的组件。它从列表中获取一些值并将它们显示在下拉列表中,到目前为止一切都很好。

然后,通过单击链接,脚本设置脚本标签的 ID 和 SRC。脚本标签加载并显示来自另一个站点的小部件。

但是,这仅在您第一次触发链接的 onclick 事件时有效。下次您尝试此操作时,脚本标签不再更新。

我注意到 jquery 第一次定位脚本标记时,它上面有一个 [0] 数组,其中包含正确更新的 SRC 和 ID 属性。

第二次触发 onclick 事件时,它确实找到了脚本标签(我猜),但标签没有相同的 [0] 数组,我没有看到浏览器调试器中的 SRC 和 ID 属性得到更新。

任何人都知道为什么该对象在第二次点击时不相似,或者如何让它在每次点击时更新脚本标签,而不仅仅是第一次?

所有帮助表示赞赏!

这是代码:

/* triggered on click of a link */
function OnUserSelectionMade(selection)
{
    if (!((selection == null) || (selection == undefined)))
    {         
        var WolframWidgetURL = "https://www.wolframalpha.com/widget/widget.jsp?id=";
        var ScriptTagID = "WolframAlphaScript";

        var WidgetID = GetDDLSelection();

        WolframWidgetURL = WolframWidgetURL + WidgetID;
        ScriptTagID = ScriptTagID + WidgetID; 

        /* works only the first time you click */
        var aScriptTag = $('script[id*="WolframWidgetScriptTag"]');
        aScriptTag.attr("id", ScriptTagID);
        aScriptTag.attr("src", WolframWidgetURL);
    }
}

/* Gets the currently selected item in the dropdown's value */
function GetDDLSelection()
{
    var ddlWidgetSelector = $('#ddlWidgetSelector option:selected');

    return ddlWidgetSelector.val();
}


$(document).ready(function () {
    window.g_WidgetListItems = null;

    ExecuteOrDelayUntilScriptLoaded(FillDropDownList, "sp.js");

    // attach event for selecting an item from the drop down list
    $("#aWidgetSelectorLink").click(function () {
        OnUserSelectionMade(this);
    });    
});
4

1 回答 1

0

您正在设置脚本 ID: var ScriptTagID = "WolframAlphaScript";

所以第二次,这一行返回 jquery 空对象:

var aScriptTag = $('script[id*="WolframWidgetScriptTag"]');

所以基本上,你不应该修改脚本 ID。

您可以改用:

var aScriptTag = $('script[id*="Wolfram"]');

但我无法理解这一点?!

于 2013-05-26T14:58:31.780 回答