【问题标题】:sharepoint Online/365 Jquery, Set Lookup Column Not working e.i ($("select[Title='Column']")sharepoint Online/365 Jquery,设置查找列不起作用 e.i ($("select[Title='Column']")
【发布时间】:2016-07-15 14:23:20
【问题描述】:

我一直在 Sharepoint Online/365 上做一些工作,但在尝试在 NewForm.aspx 中设置查找或选择列的值时遇到了困难

将我的问题缩小到无法设置查找/选择列

我已将页面上的代码简化为

 //Phase being a Choice Column & Closure a case sensitive valid option
$("select[title='Phase']").val("Closure");
//ProjectName being a Lookup Column & Test2 a case sensitive valid entry in the list
$("select[title='ProjectName']").val("Test2"); 

我在设置文本字段时没有问题,因为以下代码在我创建的文本字段上运行良好

$("input[title='TextField']").val("Test2");

我使用过以下 Jquery 库 1.7.2/min.js 和 1.11.3

【问题讨论】:

  • $("select[title='Phase']") 是动态创建的还是在页面加载时存在?
  • 我相信当页面加载时,不太确定,脚本是通过 sharepoint 的脚本编辑器 web 部件或引用包含脚本的 txt 文件的内容编辑器 web 部件添加的。我尝试了两个脚本
  • 如果它们是在加载 DOM 之后创建的(它们不是原始 DOM 的一部分,您应该像 $(document).find("select[title='Phase']").val("Closure"); 一样引用它们,$(document) 允许您与已加载 DOM。
  • 感谢您的建议,我一直在使用 _spBodyOnLoadFunctionNames.push() 来确保我的脚本在 DOM 之后运行
  • 我无意中添加了之前的评论。感谢您的建议,我确实从中学到了一些有用的东西。我认为问题可能在于 SP 如何在查找/选择字段中显示数据。最初我想将查询字符串值传递给 newform.aspx 中的查找字段,但即使在 _spBodyOnLoadFunctionNames.push() 中运行脚本时它也无法正常工作,我已经更改了之前的页面设计以推出项目的 ID 字段它的标题字段作为查询字符串。现在我通过下面的 cewp 和脚本调用它的 ID 来检索标题值

标签: javascript office365 sharepoint-online choicefield lookupfield


【解决方案1】:

不确定您的逻辑是否使用了 _spBodyOnLoadFunctionNames.push() 方法。通常您必须等待所有 SharePoint DOM 对象都加载完毕,然后才能执行您的 jQuery 代码。如果您使用 SharePoint JavaScript 库,您可能需要调用 ExecuteOrDelayUntilScriptLoaded() 以确保在加载幕式 SharePoint .js 文件后调用您的调用。

【讨论】:

  • 谢谢你,我从你的评论中学到了很多,我把答案提升为有用但不幸的是因为我的排名没有显示。我认为问题可能在于 SP 如何在查找/选择字段中显示数据。最初我想将查询字符串值传递给 newform.aspx 中的查找字段,但即使在 _spBodyOnLoadFunctionNames.push() 中运行脚本时它也无法正常工作,我已经更改了之前的页面设计以推出项目的 ID 字段它的标题字段作为查询字符串。现在我通过下面的 cewp 和脚本调用它的 ID 来检索标题值
【解决方案2】:

首先感谢“Verona Chen”和“DIEGO CARRASCAL”,因为我在 SharePoint 中学到了一些其他技巧,这将有助于其他项目。

问题之前我的原始脚本试图使用查询字符串来填充 newform.aspx 中的字段(我已经在 sharepoint 2013 上使用我在这里找到的代码完成了)

Unforuntaly with sharepoint online/365 此代码不再有效。

这段代码解决了我的问题(尽管它确实改变了前几页的构造方式)

如果这不能直接回答上述问题(因为这是我试图根据我在原始代码中缩小问题范围,我试图将我遇到的整体问题分解为更简单、更容易解决的问题),但是当我现在已经启动并运行,发布结果似乎只是礼貌。

在编码之前,我有一个带有“ProjectName”字段的项目列表。我将字段名称发送到 URL 和查询字符串以获取 mylist/newform.aspx?ProjectName=Test2

然后我试图将该 Test2 拉入列表“MyList”中的查找字段(喜欢项目列表)“ProjectName”

但即使使用 _spBodyOnLoadFunctionNames.push() 为我的旧脚本加载函数,它也无法正常工作。

玩了一段时间后,我环顾四周,发现了这段代码

<script type="text/javascript">

(function () {
var ctx = {};
ctx.Templates = {};
ctx.Templates.Fields = {
    'ProjectName': {
        'NewForm': renderTaskCategory
    }
};
SPClientTemplates.TemplateManager.RegisterTemplateOverrides(ctx);
})();


function renderTaskCategory(ctx) {
//extract cat parameter from a query string 
var GetProjID = GetUrlKeyValue('ProjID'); 
//set lookup field value 
ctx.CurrentFieldValue =  GetProjID;
//default template for rendering Lookup field control
return SPFieldLookup_Edit(ctx); 
}

</script>

这意味着我必须更改我以前的 url 构建以创建 mylist/newform.aspx?ProjID=2

此脚本然后找到项目 ID 2(在这种情况下恰好是 test2)并将项目 2 的标题放在我的查找字段 ProjectName 中

再次感谢之前提供帮助的人。 如果这不能直接回答我最初提出的问题,请再次道歉。

【讨论】:

    猜你喜欢
    • 2019-12-11
    • 2020-01-23
    • 2019-07-21
    • 2019-01-08
    • 2019-10-28
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    相关资源
    最近更新 更多