2009-05-11 12 views
9

में कोई परिणाम नहीं हैं हे, मैं उपयोगकर्ताओं को वर्तमान क्वेरी के लिए कोई परिणाम नहीं होने पर एक संदेश वापस करने का प्रयास कर रहा हूं! मुझे पता है कि मुझे कीप इवेंट में टैप करने की ज़रूरत है, लेकिन ऐसा लगता है कि प्लगइन इसका उपयोग कर रहा हैjquery autocomplete

उत्तर

6

आप एक पार्स विकल्प (डेटा पार्सिंग को संभालने के लिए फ़ंक्शन) की आपूर्ति करने का प्रयास कर सकते हैं और जब आपको कोई परिणाम नहीं मिलेगा तो आपको क्या चाहिए ।

यह उदाहरण मानता है कि आप JSON ऑब्जेक्ट्स की एक सरणी वापस प्राप्त कर रहे हैं जिसमें पूर्णनाम और पता विशेषताएँ हैं।

$('#search').autocomplete({ 
     dataType: "json", 
     parse: function(data) { 
     var array = new Array(); 
     if (!data || data.length == 0) { 
      // handle no data case specially 
     } 
     else { 
      for (var i = 0; i < data.length; ++i) { 
       var datum = data[i]; 
       array[array.length] = { 
             data: datum, 
             value: data.FullName + ' ' + data.Address, 
             result: data.DisplayName 
            }; 
      } 
     } 
     return array; 
     } 
    }); 
+0

हमम अच्छा विचार धन्यवाद दोस्त! –

+0

धन्यवाद एक लाख दोस्त, एक आकर्षण काम करते हैं! –

+0

नाइस ने मुझे बहुत मदद की: डी – Mert

9

यह सवाल, वास्तव में पुराना हो चुका है वैसे भी मैं नए jQuery यूआई 1.8.16 के साथ काम कर रहा हूँ, स्वत: पूर्ण अब बहुत अलग है: आप के लिए कोशिश कर रहे हैं http://jqueryui.com/demos/autocomplete/#default

फिर भी करते हैं प्रश्न पूछने के समान ही, कोई और पार्स फ़ंक्शन नहीं है, जहां तक ​​मुझे पता है कि कोई भी फ़ंक्शन नहीं है जिसे खोज परिणामों के साथ बुलाया जाता है।

तरह से मैं इस बंद को खींचने के लिए स्वत: पूर्ण के फिल्टर समारोह अधिभावी कर रहा है में कामयाब रहे - नोट: इस अपने सभी पूर्ण हो

$.ui.autocomplete.filter = function(array, term) { 
      var matcher = new RegExp($.ui.autocomplete.escapeRegex(term), "i"); 

      var aryMatches = $.grep(array, function(value) { 
       return matcher.test(value.label || value.value || value); 
      }); 

      if (aryMatches.length == 0){ 
       aryMatches.push({ 
        label: '<span class="info" style="font-style: italic;">no match found</span>', 
        value: null 
       });      
      } 

      return aryMatches; 
     }; 

समारोह थोड़ा स्रोत से संशोधित किया गया है को प्रभावित करेगा, ग्रेप कॉल एक ही है , लेकिन यदि कोई परिणाम नहीं है तो मैं एक ऑब्जेक्ट को शून्य के मान के साथ जोड़ता हूं, फिर मैं एक शून्य मान की जांच करने के लिए चयन कॉल को ओवरराइड करता हूं।

यह आपको एक प्रभाव देता है जहां आप टाइपिंग रखते हैं और कोई मिलान नहीं मिलता है तो आपको ड्रॉपडाउन में 'कोई मिलान नहीं मिला' आइटम मिलता है, जो कि बहुत अच्छा है।

ओवरराइड करने के लिए चयन कॉल jQuery UI Autocomplete disable Select & Close events

$(this).data('autocomplete').menu.options.selected = function(oEvent, ui){ 

      if ($(ui.item).data('item.autocomplete').value != null){ 
       //your code here - remember to call close on your autocomplete after 


      } 
     }; 

देखने के बाद से मैं एक पेज पर अपने सभी पूर्ण हो जाता है पर इस का उपयोग करें, यदि मान शून्य पहला है सुनिश्चित करें कि आप जांचें! उन कुंजीों को संदर्भित करने का प्रयास करने से पहले जो वहां नहीं हैं।

success: function(data, status, xhr){      
    if(!data.length){ 
     var result = [ 
      { 
       label: 'There are no matches for your query: ' + response.term, 
       value: response.term 
      } 
     ]; 
     response(result); 
    } 
    else{ 
     // normal response 
    } 
} 
+0

हाहा मैंने उस सवाल से कई साल पहले पूछा था, मुझे यकीन है कि मैं इसे और अधिक सुरुचिपूर्ण पैटर्न के साथ अलग-अलग करूँगा, लेकिन वैसे भी धन्यवाद –

2

मैं एक ही उद्देश्य के लिए निम्नलिखित कोड (संदेश स्वतः पूर्ण सूची में दिखाया गया है) का उपयोग कर रहा हूँ। सरल लेकिन शक्तिशाली। http://api.jqueryui.com/autocomplete/#event-response

response: function (event, ui) { 
      if (ui.content.length == 0) { 
       //Display an alert or something similar since there are no results 
      } 
     }, 
2

आप भी इस जांच करने के लिए "प्रतिक्रिया" घटना का उपयोग कर सकते हैं:

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