Sharepoint 2013 Javascript ClientPeoplePicker默认值文本

Sharepoint 2013 Javascript ClientPeoplePicker default value text

本文关键字:默认值 文本 ClientPeoplePicker Javascript 2013 Sharepoint      更新时间:2023-12-11

我正在sharepoint 2013中编写一个表单,该表单通过javascript捕获表单并提交。在大多数情况下,一切都正常。但是,对于ClientPeoplePicker,当我获得值时,它会返回"输入姓名或电子邮件"行以及我的值。解析起来很简单,但仍然很烦人,因为我觉得它不应该那样工作。

遗憾的是,我没有像其他在线用户那样获得价值,因为"ClientPeoplePicker"从未出现在我的渲染代码id中。我不知道为什么。所以我只能凭头衔来获得它。

function formatUserArrayForSharePoint(selector) {
  var users = [];
  $.each(selector, function (i, v) {
    var html = $.parseHTML(v.outerHTML);
    var username = '';
    if ($(html[0]).text().indexOf('Enter a name') !== -1)
      username = $(html[0]).text(0.substring(32, $(html[0]).text().length - 1);
    else username = $(html[0]).text();
    users.push(SP.FieldUserValue.fromUser(username));
  });
  return users;
}
//fill the variable to add to list
field1 = formatUserArrayForSharePoint($("div[title='ascpp']));
oListItem.set_item('field1', field1);
//etc
<SharePoint:ClientPeoplePicker
  AllowMultipleEntities="false"
  runat="server" Title="ascpp"
  ID="field1" AllowEmailAddresses="True" />

正如我之前所说,当我的代码呈现时,没有像其他示例那样的id格式。

其他人使用的示例:

var pickerDiv = $("[id$='ClientPeoplePicker'][title='" + dispTitle + "']");

我的渲染代码示例(不是全部):

<div id="ct100_PlaceHolderMain_field1_TopSpan" class="sp-peoplepicker-topLevel" title="ascpp" spclientpeoplepicker="true">
  <!-- other stuff that is too much to type -->
</div>

您需要获取SharePoint客户端人员选取器更改事件的选取器id。我使用OnUserResolvedClientScript得到了相同的结果,如下所示。在这里,为了获得pickerdiv,我采用了通过人员选择器文本框idtitle name获得它的方法,您可以通过检查元素来获得。将以下代码放入$(document).ready函数中。快乐编码

SP.SOD.executeFunc('clientpeoplepicker.js', 'SPClientPeoplePicker', function() {
var pickerDiv = $("[id^='Employee_x0020_Name'][title='Employee Name']");
var picker = SPClientPeoplePicker.SPClientPeoplePickerDict[pickerDiv[0].id];
 picker.OnUserResolvedClientScript = function(peoplePickerId, selectedUsersInfo) {
  //It will get the desired display name of the people from picker div, similarly any other property can be accessed via selectedUsersInfo
    var empname = selectedUsersInfo[0].DisplayText;
     console.log(empname);
   }
});

答案似乎只是去掉不需要的字符。