2010-10-18 21 views
5

शब्द के लिए खोजे जाने पर एक खोज को ट्रिगर नहीं कर रहा है मेरे पास एक jQuery UI स्वत: पूर्ण नियंत्रण है जो minlength = 3. जब अजाक्स अनुरोध को सक्रिय करता है तो समस्या निम्नानुसार होती है: कहें कि मैं प्रारंभ में "fic" दर्ज करता हूं खोज शब्द - यह ठीक है। अनुरोध आग और परिणाम लौटाए जाते हैं। मैं फैसला करता हूं कि मैं किसी भी परिणाम का चयन नहीं करना चाहता हूं और फिर एक ही खोज फिर से दर्ज कर सकता हूं (fic)। इस बार कोई अजाक्स अनुरोध आग नहीं!jQuery UI Autocomplete

मेरे कोड नीचे दिखाया गया है:

// ... do request 
$("#reportSearch").autocomplete({ 
    delay: 50, 
    minLength: 3, 
    source: function(q, add){ 
     $.ajaxSetup ({ cache: false});    
     $.ajax({ 
      type: "GET", 
      url: K_URL_REQUEST 


तो मूल रूप से "स्रोत" कॉलबैक दूसरे परिदृश्य मैं ऊपर वर्णित में निकाल दिया नहीं है। ऐसा लगता था कि इस का कारण यह है कि स्वत: पूर्ण नियंत्रण पिछला खोज शब्द पकड़े किया गया था और क्योंकि यह मिलान किया था - एक खोज नहीं ट्रिगर किया गया था:

// Taken from jquery-ui-1.8.4.custom.min.js 
if (a.term != a.element.val()) { // *** THE MATCH IS HERE 
    //console.log("a.term != a.element.val(): "+a.term+", "+a.element.val()); 
    a.selectedItem = null; 
    a.search(null, c) // *** SEARCH IS TRIGGERED HERE 
} 


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

बात यह है कि मैं इस व्यवहार को समझ नहीं पा रहा हूं। मैंने सोचा होगा कि प्रत्येक खोज अलग होनी चाहिए। कोई कैशिंग नहीं है (या वैसे भी नहीं होना चाहिए)।

इसलिए हालांकि मैंने अपनी समस्या तय कर दी है, मुझे लगता है कि मुझे यहां कुछ याद आया है।

कोई भी विचार किसी को भी? अग्रिम में धन्यवाद!

+0

whate अपने [** 'search' **] (http://docs.jquery.com/UI/Autocomplete#event-search) घटना नज़र करता है पसंद? जैसा कि मैं इसे समझता हूं, स्वत: पूर्ण आपके दूसरे परिदृश्य में आग लगनी चाहिए। –

+0

नोट आप कैसे प्रवेश कर सकते हैं 'jav' इसे हटा, तो इसे फिर से दर्ज करें, और यह अभी भी इस डेमो ==> http://jsfiddle.net/KFrQm/ के साथ काम करेंगे। –

+0

हाय पीटर - मेरे पास एक खोज कार्यक्रम नहीं है। खोज को बंद करना जरूरी नहीं है। आप उदाहरण के बारे में सही हैं। मुझे इससे पहले एहसास हुआ - केवल अंतर यह है कि मेरा स्रोत एक अजाक्स अनुरोध है। – peetj

उत्तर

6

मैं इस समस्या का समाधान मिल गया है (जानकारी के लिए, मैं jQuery यूआई 1.8.4 का उपयोग कर रहा)

jQuery-ui-1.8.4.custom.js में स्वत: पूर्ण कार्यान्वयन के लिए एक विधि के रूप में परिभाषित किया गया है _परिवर्तन। पर कथन पर टिप्पणी करके, नियंत्रण हमेशा अनुरोध भेजता है।

..., 
_change: function(event) { 
    //if (this.previous !== this.element.val()) { 
     this._trigger("change", event, { item: this.selectedItem }); 
    //} 
}, 
... 
+0

डंकन - आपका जवाब – peetj

+0

के लिए धन्यवाद पुष्टि कर सकते हैं कि इस संयुक्त w/1.8.14 में Stefaan का जवाब काम करते हैं। धन्यवाद। $ (This) .data(): –

6

मैं टिप्पणी बाहर jQuery ui स्वत: पूर्ण के स्रोत में इस अगर-बयान से इस समस्या को हल करने के लिए प्रबंधित किया है।

// keypress is triggered before the input value is changed 
clearTimeout(self.searching); 
self.searching = setTimeout(function() { 
    // only search if the value has changed 
    //if (self.term != self.element.val()) { 
     self.selectedItem = null; 
     self.search(null, event); 
    //} 
}, self.options.delay); 
7

इसके बजाय jquery.ui बदल रहा है, तो आप संपत्ति के "पिछला" मूल्य को मिटाकर, कुछ इस तरह कर रही कोशिश कर सकते हैं:।
$ (this) .data() autocomplete.previous = बातिल;

+0

मैं jquerymobile स्वत: पूर्ण में एक ही समस्या का सामना करना पड़ रहा यहाँ लिंक http://stackoverflow.com/q/18798630/2307391 –

+0

gezequiel का जवाब मेरे लिए काम किया, केवल मेरे मामले में यह था में है। autocomplete.term = शून्य; – Babayoto

+0

jQuery ui पर 1.10.2 '$ (this) .data() uiAutocomplete.term = बातिल;।' मुझे – Safareli

0

यहां बड़ी युक्तियाँ - यह कुछ ऐसा है जो मैं थोड़ी देर के लिए संघर्ष कर रहा हूं।

मेरे लिए, एकमात्र समाधान जो लगातार काम करता है वह डंकन और स्टीफैन के उत्तरों का संयोजन है।

1

चूंकि JQuery UI 1.8+ आप अपने सभी स्वत: पूर्ण विजेटों के डिफ़ॉल्ट व्यवहार को बढ़ाने के लिए विजेट फैक्ट्री का उपयोग कर सकते हैं। , बस के बाद इस सामग्री के साथ एक जावास्क्रिप्ट फ़ाइल को शामिल jQueryUI

// Extend jquery UI autocomplete 
$.widget("ui.autocomplete", $.ui.autocomplete, { 
    _close: function(event) { 
     var ret = this._super(); 

     // Resets previously used search term 
     this.term = null; 

     return ret; 
    } 
});