2010-02-23 9 views
6

मेरे पास एक वेब उपयोगकर्ता नियंत्रक पर एक मल्टीव्यू खोज सुविधा है जिसे पुनरावर्तक, ओएचएमवाई के भीतर बुलाया जाता है !!पुनरावर्तक के भीतर उपयोगकर्ता नियंत्रक पर स्वतः पूर्ण jQuery .NET

मेरे पास कुछ प्रशिक्षण सत्र एक पृष्ठ पर सूचीबद्ध किए जा रहे हैं, प्रत्येक कर्मचारी एक खोज वेब उपयोगकर्ता नियंत्रक को बुलाता है ताकि लोग प्रशिक्षण सत्र में कर्मचारियों को जोड़ने के लिए खोज सकें। मेरे पास पृष्ठ पर जेएस में सूचीबद्ध कर्मचारी नाम और कर्मचारी आईडी हैं और jQuery स्वत: पूर्ण का उपयोग करके मैंने उन्हें कर्मचारी की खोज की है और उपयोगकर्ता नियंत्रक में एक छिपे हुए क्षेत्र को पॉप्युलेट किया है। प्रक्रिया पूरी होने के बाद उनके पास अभी तक एक और कर्मचारी जोड़ने का विकल्प है।

तो मेरे पास सभी कर्मचारी खोज बॉक्स में Autocompelte 'work' था, लेकिन एक मैं प्रारंभिक खोज (पोस्टबैक) स्वत: पूर्ण करता हूं फिर से काम नहीं करेगा।

तो मैं अद्यतन $()। तैयार (समारोह (Pageload (करने के लिए)) तो यह एक से अधिक खोजें पर सही ढंग से काम करता है, लेकिन केवल पुनरावर्तक के अंतिम आइटम में (jQuery उपयोगकर्ता नियंत्रक पर लोड किया जाता)

FYI करें

: मैं जे एस स्ट्रिंग के रूप में EMPLOYEENAME निर्धारित किया है | आईडी और jQuery प्रदर्शित करता है कर्मचारी का नाम और अगर वे चयन यह एक एएसपी में आईडी फेंकता है: गुप्त फ़ील्ड

<script type="text/javascript"> 

    format_item = function(item, position, length) { 
     var str = item.toString().split("|", 2);   
     return str[0]; 
    } 

    function pageLoad() {  
     $("#<%=tb_EmployeeName.ClientID %>").autocomplete(EmployeeList, { 
      minChars: 0, 
      width: 500, 
      matchContains: true, 
      autoFill: false, 
      scrollHeight: 300, 
      scroll: true, 
      formatItem: format_item, 
      formatMatch: format_item, 
      formatResult: format_item 
     }); 
     $("#<%=tb_EmployeeName.ClientID %>").result(function(event, data, formatted) {     
      var str = data.toString().split("|", 2); 
      $("#<%=hf_EmployeeID.ClientID %>").val(str[1]); 
     }); 
    };  

    </script> 

मैं पहले से ही अनुमान लगा सकते हैं कि नियंत्रण उपयोगकर्ता के भीतर pageload दोहराते हुए मैं पिछले पेज लोड को ओवरराइड करता हूं।

प्रश्न: क्या इसके आसपास कोई रास्ता है, एक ही पृष्ठ में सभी jQuery प्रकट होने का एक तरीका लोड या किसी भी तरह से मेरे सभी खोज बॉक्स को संभालने के लिए एक एकल jquery कॉल है?

मैं पेज सभी नियंत्रकों बुला क्योंकि मैं विशिष्ट tb_EmployeeName पाठ बॉक्स संदर्भित और hf_EmployeeID छिपी हुई फ़ील्ड का कोई तरीका नहीं में jQuery स्थानांतरित नहीं कर सकते।

किसी भी मदद या अंतर्दृष्टि के लिए आपको बहुत धन्यवाद, आप मुझे इस समस्या में दे सकते हैं।

यह मल्टीव्यू कि उपयोगकर्ता नियंत्रक पर

 <asp:MultiView ID="mv_EmployeeArea" runat="server" ActiveViewIndex="0"> 

     <asp:View ID="vw_Search" runat="server">     
      <asp:Panel ID="eSearch" runat="server"> 
       <b>Signup Employee Search</b> (<i>Last Name, First Name</i>)<br /> 
       <asp:TextBox ID="tb_EmployeeName" class="EmployeeSearch" runat="server"></asp:TextBox> 
       <asp:HiddenField ID="hf_EmployeeID" runat="server" /> 

       <asp:Button ID="btn_Search" runat="server" Text="Search" /> 
      </asp:Panel>      
     </asp:View> 

     <asp:View ID="vw_Confirm" runat="server"> 
      <b>Signup Confirmation</b> 
      <asp:FormView ID="fv_EmployeeInfo" runat="server"> 
       <ItemTemplate> 
        <%#(Eval("LastName"))%>, <%#(Eval("FirstName"))%><br /> 
       </ItemTemplate> 
      </asp:FormView>  
      <asp:Button ID="btn_Confirm" runat="server" Text="Signup this employee" /> &nbsp; <asp:Button ID="btn_Reset3" runat="server" Text="Reset" /> 
     </asp:View> 

     <asp:View ID="vw_ThankYou" runat="server"> 
      <b>Thank You</b><br /> 
      The employee has been signed up and an email confirmation has been sent out.<br /><br /> 
      <asp:Button ID="btn_Reset" runat="server" Text="Reset" /> 
     </asp:View>    

    </asp:MultiView> 

------------ अद्यतन है -------------

नालम के लिए धन्यवाद, मैं अपनी पिछली (हटाई गई) कोशिश करने के बाद समस्या को बेहतर तरीके से हल करने में सक्षम था। अब मेरे पास एक ऐसा फ़ंक्शन है जो प्रत्येक खोज बॉक्स के लिए अधिक कोड उत्पन्न किए बिना खोज बॉक्स के लिए सभी उदाहरणों को संभालता है।

निम्नलिखित जावास्क्रिप्ट को मूल पृष्ठ पर बुलाया जा रहा है जिसमें दोहराना शामिल है।

format_item = function(item, position, length) { 
    var str = item.toString().split("|", 2); 
    return str[0]; 
} 

function pageLoad() { 
    $(".ea_Autocomplete").each(function(i, element) { 

     var tb_EmployeeName = $(this).children('input[id*=tb_EmployeeName]:first') 
     var hf_EmployeeID = $(this).children('input[id*=hf_EmployeeID]:first') 

     tb_EmployeeName.autocomplete(EmployeeList, { 
      minChars: 0, 
      width: 500, 
      matchContains: true, 
      autoFill: false, 
      scrollHeight: 300, 
      scroll: true, 
      formatItem: format_item, 
      formatMatch: format_item, 
      formatResult: format_item 
     }); 

     tb_EmployeeName.result(function(event, data, formatted) { 
      var str = data.toString().split("|", 2); 
      hf_EmployeeID.val(str[1]); 
     }); 


    }); 
}; 

मैं कक्षा ea_Autocomplete

<asp:Panel ID="eSearch" runat="server"> 
       <b>Signup Employee Search</b> (<i>Last Name, First Name</i>)<br /> 
       <div class="ea_Autocomplete"> 
        <asp:TextBox ID="tb_EmployeeName" class="EmployeeSearch" runat="server"></asp:TextBox> 
        <asp:HiddenField ID="hf_EmployeeID" runat="server" /> 
       </div>                     

       <asp:Button ID="btn_Search" runat="server" Text="Search" /> 
    </asp:Panel> 

धन्यवाद फिर से Nalum के साथ एक div में दो आदानों लपेटकर परे मल्टीव्यू में कुछ भी परिवर्तन नहीं किया!

उत्तर

2

मैं थोड़ी अनुमान लगा रहा हूं, मुझे वास्तव में एएसपीनेट नहीं पता है, इसलिए अगर मैं गलत हूं तो मुझे सही करें।

मुझे लगता है कि मल्टीव्यू एएसपीनेट की पृष्ठभूमि में कुछ प्रकार की अजीब प्रकार की चीज कर रहा है, इस मामले में जब आपका खोज फ़ॉर्म jQuery.autocomplete पुनः लोड किया गया है तो नए फॉर्म पर लागू नहीं होगा।

संभावना से अधिक मैं अभी भी जो कुछ कहा है उसमें मैं पूरी तरह से गलत हूं।


मेरी दूसरी टिप्पणी के लिए संपादित करें।

$('.autocomplete').each(function(i,element){ 
    $(element).autocomplete({...}); 
    $(element).result(function(event, data, formatted) { 
     // Now based on you're element id you can build up an id and work with that 
     var id = element.id + '-extra-stuff';    
     var str = data.toString().split("|", 2); 
     $('#' + id).val(str[1]); 
    }); 
}); 
+0

आप सही हैं, jQuery के साथ पोस्टबैक संदेश। इसमें देखकर मुझे पेज लोड() (ऊपर कोड देखें) का उपयोग करने के बारे में जानकारी मिली जो कि बहुत अच्छा काम कर रहा था जब मेरे पास पृष्ठ पर खोज बॉक्स का केवल एक उदाहरण था। – TheDPQ

+0

आप आईडी द्वारा फ़ॉर्म तत्व तक पहुंचने लगते हैं, यदि खोज बॉक्स के प्रत्येक उदाहरण में एक ही आईडी है तो जावास्क्रिप्ट विफल हो जाएगा क्योंकि आईडी अद्वितीय होनी चाहिए। क्या होगा यदि आप अपना कोड बदलते हैं ताकि उसे कक्षा द्वारा इनपुट फ़ील्ड मिल रहा हो, जो कई ऑटो-पूर्ण फ़ील्ड की अनुमति देगा। उदा। '$ (" autocomplete ")। स्वतः पूर्ण (कर्मचारी सूची ' – Nalum

+0

मैंने मूल रूप से केवल एक सीएसएसक्लास का उपयोग किया था जब मैं पहली बार इसका परीक्षण कर रहा था। हालांकि नाम स्ट्रिंग को विभाजित करने और उनका पहला/अंतिम नाम कहां बंद करना और शुरू करना है, 'मैरी एन' जैसे पहले नाम या 'डेला क्रूज़' जैसे अंतिम नाम सभी को बंद कर देंगे। इसलिए मैंने इसे छिपे हुए फ़ील्ड के साथ अपडेट किया, जिसमें आईडी प्राप्त करने के लिए फिर से खोज करने के लिए एक शानदार तरीके की आवश्यकता नहीं थी। हालांकि एएसपी: छुपा फ़ील्ड एक सीएसएसक्लास विशेषता का समर्थन नहीं करता है, इसलिए कर्मचारी को स्वतः पूर्ण से चुनने के बाद कर्मचारी के छिपे हुए क्षेत्र को पॉप्युलेट करने का कोई तरीका नहीं है। – TheDPQ

संबंधित मुद्दे