我正在构建一个仅为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);
});
});
答案 0 :(得分:0)
您正在设置脚本ID:
var ScriptTagID = "WolframAlphaScript";
所以第二次,这行返回jquery空对象:
var aScriptTag = $('script[id*="WolframWidgetScriptTag"]');
基本上,你不应该修改脚本ID。
你可以改用:
var aScriptTag = $('script[id*="Wolfram"]');
但我无法理解这一点?!