2011-09-07 5 views
6

क्या किसी ने jquery परिवर्तन ईवेंट को आग लगाने का प्रयास करने का प्रयास किया है जब लोग पिकर पॉप अप ब्राउज विंडो से मुख्य रूप में मूल्य लौटाता है? मैंने jquery कथन में कई टैग्स की कोशिश की है लेकिन कुछ भी काम नहीं करता है। (सपा 2010)जब लोग पिकर पॉप अप विंडो से मुख्य रूप में मूल्य लौटाते हैं तो मुझे jquery की आवश्यकता होती है

<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" /> 

मैं

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

किसी भी मदद बहुत सराहना की जाएगी ...

+1

बहुत उपयोगी प्रश्न, thnx साहब :) –

उत्तर

14

आप SharePoint के संस्करण निर्दिष्ट नहीं किया है, लेकिन निम्नलिखित विवरण SharePoint 2007 पर लागू होता है और 2010

लोगों पिकर के मूल्य में इस बात की पुष्टि नहीं कर रहा था 'की जाँच करें नाम' आइकन या 'पर क्लिक करके सेट किया जा सकता 'आइकन ब्राउज़ करें।

यदि आप 'चेक नाम' आइकन पर क्लिक करते हैं जो एक एंकर टैग है, तो ऑनक्लिक ईवेंट 'WebForm_DoCallback' को आमंत्रित करता है जो असीमित रूप से लोगों को पिकर में दर्ज किए गए नाम को सत्यापित करने के लिए SharePoint सर्वर पर HTTP अनुरोध करता है।

function WebForm_DoCallback(eventTarget, 
eventArgument, 
eventCallback, 
context, 
errorCallback, 
useAsync){ 
... 
} 

WebForm_DoCallbacks तर्क यह है कि है कि आप सबसे में दिलचस्पी होगी कि 'eventTarget', लोगों पिकर पाठ क्षेत्र:

बाद WebForm_DoCallback हस्ताक्षर है। आपको 'eventCallback' में भी रुचि होगी क्योंकि यह async HTTP अनुरोध रिटर्न के बाद कॉलबैक विधि है। इस मामले में, यह कोर जेएस में परिभाषित 'EntityEditorHandleCheckNameResult (परिणाम, सीटीएक्स)' है।

बाद 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); 
     } 
    } 
}; 

के बाद एक कस्टम लोग पिकर ईवेंट हैंडलर जो परिणाम और लोगों पिकर पाठ क्षेत्र की आईडी अलर्ट है:

function onPeoplePickerFieldSet(result, ctx){ 
    alert(result); 
    alert(ctx); 
} 

तर्क है कि लोग पिकर नाम चेक या ब्राउज़ संवाद से चुने जाने के बाद ऑनपोलपिकरफ़िल्ड्ससेट विधि को लागू करने की अनुमति देगा। साथ ही, यदि आप jQuery का उपयोग कर रहे हैं, तो इस कथन को दस्तावेज़.ready ईवेंट हैंडलर में शामिल किया जा सकता है।

invokeAfterEntityEditorCallback(onPeoplePickerFieldSet); 

onPeoplePickerFieldSet विधि के 'परिणाम' तर्क सफल सत्यापन के साथ ही डोमेन quailified उपयोगकर्ता नाम का संकेत एक 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">[email protected]</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' तर्क लोगों पिकर पाठ क्षेत्र की आईडी है और एक jQuery चयनकर्ता बयान में इस्तेमाल किया जा सकता।

यही है!

+1

मैंने स्पष्ट रूप से यह नहीं बताया लेकिन jQuery में पिकर टेक्स्ट एरिया के परिवर्तन ईवेंट की सदस्यता लेना आंतरिक समाधान की असीमित प्रकृति के कारण काम नहीं करेगा। इसके बजाय, मेरी सिफारिश के अनुसार आपके कस्टम तर्क इंजेक्शन एक और अधिक विश्वसनीय समाधान है। –

+1

बहुत उपयोगी, मेरी इच्छा है कि मैं दो बार अप-वोट कर सकता हूं :) –

+0

बहुत उपयोगी, मैंने यहां कॉलबैक विधि को ओवरराइड करने के बारे में एक पोस्ट भी लिखा है EntityEditorCallback http://vgrem.wordpress.com/2013/03/27/different-ways-of -extending-people-editor-in-the-client-side-sharepoint-2010/ –

0

की कोशिश की है बजाय इस प्रयास करें:

$("textarea[title='Primary Owner People Picker']").live(function() 
{ 
    alert("here"); 
}); 

और यह मददगार होगा अगर आप पूर्ण एचटीएमएल/जेएस कोड पोस्ट कर सकते हैं तो अपनी समस्या को समझने के लिए।

+0

आप "बदलाव" अपने लाइव समारोह में भूल गया ... –

+2

'.live()' है jQuery 1.7 के रूप में बहिष्कृत, और इसलिए अनुशंसित नहीं है - http://api.jquery.com/live/ - '.on()' या शायद '.delegate()' का उपयोग करें। – vapcguy

1

मैंने कुछ बदलावों के साथ उपरोक्त एथेंस होलोवे से उत्तर का उपयोग किया। मेरा उपयोग मामला लोगों-पिकर से किसी विशेष उपयोगकर्ता को छोड़ रहा था। आप केंद्रीय व्यवस्थापक सर्वर पर peoplepicker serviceaccountdirectorypaths का उपयोग कर लोगों-पिकर से उपयोगकर्ता को बाहर कर सकते हैं, लेकिन विभिन्न परिवर्तन नियंत्रण कारणों से जो हमारे लिए कोई विकल्प नहीं था। एक विशेष साइट पर जावास्क्रिप्ट जोड़ना हमें पूरे साइट संग्रह को प्रभावित किए बिना काम पूरा करने देता है।

var peoplePickerCtx; 

    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); 
     } 
    } 
}; 

function onPeoplePickerFieldSet(result, ctx){ 
    // gets the long ID string of the people-picker control when the user touches the control 
    if (result != undefined) { 
     var checkThis = result.toString(); 
     peoplePickerCtx = ctx.toString(); 
    } 
} 

function userMessage (checkThis) 
{ 
    if (checkThis.indexOf("USERNAME TO EXCLUDE GOES HERE") !=-1) 
    { 
     alert ('That account is not valid YOUR ERROR MESSAGE GOES HERE') 
     return false; 
    } 
    return true; 
} 

    function PreSaveAction() { 
    // this is a standard function - give it this name and it runs pre-save 
    var returnMe = false; 

    // used simple getElementById instead of jQuery because it picks up what is actually in the blank. 
    // jQuery picked up the old value until after the user clicked CheckNames button 
    var checkThis= document.getElementById(peoplePickerCtx+"_upLevelDiv").innerText.toLowerCase() 
    if (checkThis!=undefined) 
    { 
     returnMe = userMessage (checkThis) 
    } 

    return returnMe ; 
    }; 


invokeAfterEntityEditorCallback(onPeoplePickerFieldSet); 


</script> 
0

कैसे इस बारे में:

$("textarea[title='Primary Owner People Picker']").on('change', function() 
{ 
    alert('here'); 
}); 
+0

यह वही समाधान है जिसे ओपी ने काम नहीं किया। क्या मैं कुछ भूल रहा हूँ? –

+0

उन्होंने '.change (function() {...}) का उपयोग करके कहा, 'काम नहीं किया, लेकिन' .on' का उपयोग थोड़ा अलग है: http://jsperf.com/document-on-click-vs-element क्लिक करें/2। मैं मुख्य रूप से '.live()' के बारे में पोस्ट पर ध्यान आकर्षित करना चाहता था, कि यह लिखने का यह नया तरीका था: http://weblog.west-wind.com/posts/2013/Jun/12/Replacing-jQuerylive -with-jQueryon के साथ। और जब बॉक्स बदलता है तो मान को पकड़ने के लिए, यह उत्तर, 'var name = $ (this) .val()' जैसे कुछ जोड़ते समय मेरे लिए ठीक काम करता है, इसलिए वास्तव में यह सुनिश्चित नहीं है कि ओपी को क्या चाहिए। – vapcguy

0

एथेन का जवाब मेरे लिए एक आकर्षण की तरह काम किया

यह पूरा स्क्रिप्ट कि लोग पिकर से एक एकल उपयोगकर्ता शामिल नहीं है। चूंकि सत्यापन कभी-कभी एक त्रुटि फेंकता है (जैसे किसी नाम से एकाधिक मिलान) मैं अपना कोड तब तक चलाने के लिए नहीं करना चाहता जब तक कि सत्यापन कोई त्रुटि न करे। दुर्भाग्य से उपयोगकर्ताओं को एकाधिक लौटाए गए सही नाम का चयन करने के बाद फिर से सत्यापन बटन पर क्लिक करने की आवश्यकता होती है। यहां केवल एक छोटे से अतिरिक्त कोड मैं परिणाम पार्स करने के लिए प्रयोग किया जाता है:

function onPeoplePickerFieldSet(result, ctx){ 
    xmlDoc = $.parseXML(result); 
    $xml = $(xmlDoc) 
    if($xml.find("Entities").attr("Error") == "") 
    { 
     getUserData($xml.find("Entity").attr("Key")); //this is the username 
    } 
} 
संबंधित मुद्दे