当人们选择器从浏览弹出窗口将值返回到主窗体时,我需要触发jquery

Ant*_*ony 6 c# sharepoint jquery peoplepicker

当人们选择器从弹出的浏览窗口将值返回到主窗体时,是否有人试图尝试触发jquery更改事件?我在jquery语句中尝试了几个标签,但似乎没有任何效果.(SP 2010)

<wssawc:PeopleEditor AllowEmpty="false" AcceptAnyEmailAddresses="true" ValidateResolvedEntity="true"
ShowButtons="true" ShowDataValidationErrorBorder="true" ShowEntityDisplayTextInTextBox="true"
ShowErrorPlaceHolder="true" ValidatorEnabled="true" MultiSelect="false" ID="primaryOwnerPicker"
runat="server" SelectionSet="User" Width="12em" AllowTypeIn="false" DoPostBackOnResolve="false"
EnableBrowse="true" ForceClaims="true" Title="Primary Owner People Picker" />
Run Code Online (Sandbox Code Playgroud)

我试过了

$("textarea[title='Primary Owner People Picker']").change(function ()
{
    alert("here");
});
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激...

Ath*_*way 14

您没有指定SharePoint的版本,但以下说明适用于SharePoint 2007,并且未在2010年确认.

可以通过单击"检查名称"图标或"浏览"图标来设置人员选取器的值.

如果单击作为锚标记的"检查名称"图标,则onclick事件将调用"WebForm_DoCallback",它将异步向SharePoint服务器发出HTTP请求,以验证输入到人员选择器中的名称.

以下是WebForm_DoCallback签名:

function WebForm_DoCallback(eventTarget, 
eventArgument, 
eventCallback, 
context, 
errorCallback, 
useAsync){
...
}
Run Code Online (Sandbox Code Playgroud)

您最感兴趣的WebForm_DoCallbacks参数之一是'eventTarget',即人员选择器文本区域.您还会对'eventCallback'感兴趣,因为它是异步HTTP请求返回后调用的回调方法.在这种情况下,它是在核心js中定义的'EntityEditorHandleCheckNameResult(result,ctx)'.

以下是EntityEditorHandleCheckNameResult函数的定义

function EntityEditorHandleCheckNameResult(result, ctx)
{
   EntityEditorClearWaitCursor(ctx);
   EntityEditorCallback(result, ctx);
} 
Run Code Online (Sandbox Code Playgroud)

请注意,它将事件处理委托给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);
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

以下是一个自定义人员选择器事件处理程序,它会提醒结果和人员选取器文本区域的ID:

function onPeoplePickerFieldSet(result, ctx){
    alert(result);
    alert(ctx); 
}
Run Code Online (Sandbox Code Playgroud)

以下是允许在从浏览对话框中选中或选择人员选择器名称后调用onPeoplePickerFieldSet方法的逻辑.此外,如果您使用的是jQuery,则可以在document.ready事件处理程序中调用此语句.

invokeAfterEntityEditorCallback(onPeoplePickerFieldSet);
Run Code Online (Sandbox Code Playgroud)

onPeoplePickerFieldSet方法的'result'参数是一个XML结果,表示成功验证以及域quailified用户名.以下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>
Run Code Online (Sandbox Code Playgroud)

'ctx'参数是人员选取器文本区域的ID,可以在jQuery选择器语句中使用.

而已!