您没有指定 SharePoint 的版本,但以下说明适用于 SharePoint 2007,并且在 2010 年未得到确认。
可以通过单击“检查姓名”图标或“浏览”图标来设置人员选择器的值。
如果单击作为锚标记的“检查名称”图标,onclick 事件将调用“WebForm_DoCallback”,它将异步向 SharePoint 服务器发出 HTTP 请求,以验证输入到人员选取器中的名称。
以下是 WebForm_DoCallback 签名:
function WebForm_DoCallback(eventTarget,
eventArgument,
eventCallback,
context,
errorCallback,
useAsync){
...
}
您最感兴趣的 WebForm_DoCallbacks 参数之一是“eventTarget”,即人员选择器文本区域。您还将对“eventCallback”感兴趣,因为它是异步 HTTP 请求返回后调用的回调方法。在这种情况下,它是在核心 js 中定义的 'EntityEditorHandleCheckNameResult(result, ctx)'。
以下是 EntityEditorHandleCheckNameResult 函数的定义
function EntityEditorHandleCheckNameResult(result, ctx)
{
EntityEditorClearWaitCursor(ctx);
EntityEditorCallback(result, ctx);
}
请注意,它将事件处理委托给 EntityEditorCallback 方法。如果您单击“浏览”图标,也会出现这种情况,该图标会打开一个对话框供您查找和选择用户。“浏览”图标显然利用了不同的调用堆栈,但由于它们都依赖于 EntityEditorCallback,因此我将重点介绍此方法,因为当您单击“检查名称”或“浏览”时解决方案有效。
要在调用 EntityEditorCallback 后执行您的代码,您可以利用以下代码:
var invokeAfterEntityEditorCallback = function(func) {
var old__EntityEditorCallback = EntityEditorCallback;
if (typeof EntityEditorCallback != 'function') {
EntityEditorCallback = func;
} else {
EntityEditorCallback = function(result, ctx) {
old__EntityEditorCallback(result, ctx);
func(result, ctx);
}
}
};
以下是一个自定义人员选择器事件处理程序,它会提醒结果和人员选择器文本区域的 ID:
function onPeoplePickerFieldSet(result, ctx){
alert(result);
alert(ctx);
}
以下是允许在从浏览对话框中检查或选择人员选取器名称后调用 onPeoplePickerFieldSet 方法的逻辑。此外,如果您使用 jQuery,则可以在 document.ready 事件处理程序中调用此语句。
invokeAfterEntityEditorCallback(onPeoplePickerFieldSet);
onPeoplePickerFieldSet 方法的“结果”参数是一个 XML 结果,指示成功验证以及域限定用户名。以下 XML 是单击“检查名称”图标产生的示例:
<Entities Append="False" Error="" Separator=";" MaxHeight="3">
<Entity Key="HOLLOWAY\csteel" DisplayText="Craig Steel" IsResolved="True" Description="HOLLOWAY\csteel">
<ExtraData>
<ArrayOfDictionaryEntry xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<DictionaryEntry>
<Key xsi:type="xsd:string">DisplayName</Key>
<Value xsi:type="xsd:string">Craig Steel</Value>
</DictionaryEntry>
<DictionaryEntry>
<Key xsi:type="xsd:string">Email</Key>
<Value xsi:type="xsd:string">csteel@holloway.net</Value>
</DictionaryEntry>
<DictionaryEntry>
<Key xsi:type="xsd:string">SPUserID</Key>
<Value xsi:type="xsd:string">16</Value>
</DictionaryEntry>
<DictionaryEntry>
<Key xsi:type="xsd:string">PrincipalType</Key>
<Value xsi:type="xsd:string">User</Value>
</DictionaryEntry>
</ArrayOfDictionaryEntry>
</ExtraData>
<MultipleMatches />
</Entity>
</Entities>
'ctx' 参数是人物选择器文本区域的 ID,可以在 jQuery 选择器语句中使用。
就是这样!