如何将下拉框选中值赋值给SharePoint列表的查找列?
嘿,我来帮你搞定这个把下拉框选中值传入SharePoint查找列的问题!首先得明确一个核心点:SharePoint的查找列存储的是关联列表中对应项的ID,不是显示的文本值,所以你现在拿到的下拉框文本还需要转成对应关联项的ID才行,不能直接用文本赋值。
下面是完整的实现步骤和代码:
步骤1:保留你已有的下拉框文本获取代码
你已经成功拿到了下拉框选中的文本,这部分代码可以直接用:
var stcode = document.getElementById("Projstcode"); var stcodetxt = stcode.options[stcode.selectedIndex].text;
步骤2:根据文本查询关联列表,获取对应项的ID
假设你的关联列表叫StateList(记得替换成你实际的关联列表名称),我们用SharePoint JSOM查询这个列表中与选中文本匹配的项,拿到它的唯一ID:
// 初始化SharePoint上下文 var context = new SP.ClientContext.get_current(); var web = context.get_web(); // 获取关联列表(替换为你的关联列表真实名称) var stateList = web.get_lists().getByTitle("StateList"); // 构建查询条件:查找文本字段(这里用Title举例,换成你关联列表存文本的字段名)等于选中值的项 var camlQuery = new SP.CamlQuery(); camlQuery.set_viewXml(`<View><Query><Where><Eq><FieldRef Name="Title"/><Value Type="Text">${stcodetxt}</Value></Eq></Where></Query></View>`); var items = stateList.getItems(camlQuery); context.load(items); // 执行查询 context.executeQueryAsync(function() { if (items.get_count() > 0) { var targetItem = items.itemAt(0); var stateItemId = targetItem.get_id(); // 拿到关联项的ID // 拿到ID后,调用函数给目标列表的查找列赋值 setLookupFieldValue(stateItemId); } else { console.log("关联列表里没找到匹配的State项哦"); } }, function(sender, args) { console.log("查询关联列表出错: " + args.get_message()); });
步骤3:给目标列表的查找列赋值
接下来写setLookupFieldValue函数,用查到的ID创建查找值对象,赋值给目标列表的State字段:
function setLookupFieldValue(stateId) { var context = new SP.ClientContext.get_current(); var web = context.get_web(); // 获取你要操作的目标列表(替换为真实列表名称) var targetList = web.get_lists().getByTitle("YourTargetList"); // 创建新列表项(如果是更新已有项,改成getItemById(itemId)即可) var itemCreateInfo = new SP.ListItemCreationInformation(); var newItem = targetList.addItem(itemCreateInfo); // 创建查找值对象,传入关联项的ID var lkfieldState = new SP.FieldLookupValue(); lkfieldState.set_lookupId(stateId); // 这里用动态获取的ID,不要硬写死1哦 // 给State查找列赋值 newItem.set_item("State", lkfieldState); // 如果有其他字段要设置,在这里添加 // newItem.set_item("OtherFieldName", "对应值"); newItem.update(); context.load(newItem); // 保存更改 context.executeQueryAsync(function() { console.log("列表项创建成功,State查找列已正确赋值!"); }, function(sender, args) { console.log("操作列表项出错: " + args.get_message()); }); }
额外小技巧
如果你的下拉框选项的value属性本身就存的是关联列表项的ID,那可以直接跳过查询步骤,省事儿又高效:
// 直接从下拉框拿到关联项ID var stateItemId = stcode.value; // 直接调用赋值函数 setLookupFieldValue(stateItemId);
内容的提问来源于stack exchange,提问作者saumya bhargava
相关产品推荐
相关产品推荐

