मेरे पास एक jQuery फ़ंक्शन है जिसे मैं निष्पादित करना चाहता हूं जब टेक्स्ट इनपुट फ़ील्ड में दो से अधिक वर्ण हों:

$('#textInput').on('input', displaySuggestions);

function displaySuggestions(){
    if($('#textInput')[0].value.length > 2){
        let searchValue = $('#textInput')[0].value;
        $.myObj.getResults( searchValue, (results) => {            
          console.log(results); 
      });
    }
}

यदि मैं getResults फ़ंक्शन का उपयोग नहीं करता, जिसकी मुझे आवश्यकता है, तो फ़ंक्शन अच्छा काम करता है। यह एक प्लगइन से है जो इस तरह दिखता है:

(function($) {

    $.myObj = {

        getResults: function(value, callBack){
            var req = $.ajax({
                url:'http://api.my/api/name' + value
            });

             req.done(callBack);
        }
    };

}(jQuery));

फ़ंक्शन को उन परिणामों को लॉग करना चाहिए जो एपीआई कॉल से JSON डेटा है। टेक्स्ट इनपुट फ़ील्ड में दो से अधिक वर्ण जोड़े जाने पर इसे केवल एक बार परिणाम वापस करना चाहिए। हालांकि, getResults फ़ंक्शन का उपयोग करते समय, परिणाम प्रत्येक दो वर्णों में लॉग किए जाते हैं, उदाहरण के लिए, यदि मैं छह अक्षरों वाला एक शब्द लिखता हूं, तो परिणाम 3 बार लॉग किए जाएंगे। मुझे getResults फ़ंक्शन में बदलाव करने की अनुमति नहीं है, लेकिन अगर इसके आसपास कोई फिक्स नहीं है, तो मैं विचार करूंगा। सुनिश्चित नहीं है कि मेरे सिर को इसके चारों ओर कैसे लपेटा जाए। अग्रिम में धन्यवाद!

0
Bozhidar Iliev 10 अप्रैल 2020, 12:51

1 उत्तर

सबसे बढ़िया उत्तर

यदि आप केवल एक बार परिणाम वापस करना चाहते हैं तो हैंडलर को हटाने के लिए संबंधित ऑफ विधि का उपयोग करें।

function displaySuggestions(){
    if ($('#textInput')[0].value.length > 2) {
        let searchValue = $('#textInput')[0].value;
        $.myObj.getResults( searchValue, (results) => {            
          console.log(results); 
      });
      $('#textInput').off('input', displaySuggestions);
    }
}

यदि आप हर बार इनपुट 2 वर्णों से अधिक होने पर परिणामों को कॉल करना चाहते हैं (उदाहरण के लिए उपयोगकर्ता इनपुट हटाता है और फिर से टाइप करता है), तो getResults() कॉल के आसपास एक गार्ड जोड़ें।

let displayResults = true;
function displaySuggestions() {
    let searchValue = $('#textInput')[0].value;
    if (displayResults) {
        if (searchValue.length > 2) {
            displayResults= false;
            $.myObj.getResults( searchValue, (results) => {
                console.log(results); 
            });
        }
    } else if (searchValue.length < 2) {
        displayResults = true;
    }
}
1
Steve M 11 अप्रैल 2020, 03:45