2010-09-28 7 views
5

मैं _renderItem उपयोग कर रहा हूँ परिणाम सूचीjQuery ui स्वत: पूर्ण - renderItem

.data("autocomplete")._renderItem = function(ul, item) { 
      var temp = item.url.substring(16, item.url.length) 
      return $("<li></li>") 
      .data("item.autocomplete", item) 
      .append("<a>" + item.value + "<br>" + item.url + "<br>" + item.description + "<br>" + "Support URL: " + item.support_url + "<br>" + "Contact: " + "<a href=" + item.contact + ">Test</a>" + "<br />" + "</a>" ) 
      .appendTo(ul) 

यह संशोधित करने के लिए स्वचालित रूप से कुछ भी है कि एक href के रूप में एक यूआरएल की तरह दिखता है ऊपर अंकन के व्यवहार है। मैं एक पुराने स्वत: पूर्ण है कि इस तरह से किया गया था में पूरे आइटम एक लिंक

करना चाहते हैं:

.result(function(event, item) { 
    location.href = item.url; 
    }); 

लेकिन इस का समर्थन किया सीवन नहीं करता है किसी भी अब।

किसी को भी मैं कैसे कर सकते हैं या तो पता है:

1) कुछ इसी तरह .result कार्य करने के लिए इस्तेमाल करते हैं और सिर्फ पूरे आइटम एक लिंक बना
या
2) _renderItem संशोधित जिससे यह अपने आप नहीं है स्ट्रिंग को बदलना जो href के

में URL की तरह दिखते हैं। ,

$('selector').autocomplete({ 
    source: ..., 
    select: function(event, ui) { window.location = ui.url; } 
}); 
+0

क्या आप पहले से प्रस्तुत किए गए आइटमों के मार्कअप को बदलने के लिए स्वत: पूर्ण खुले ईवेंट के भीतर कोड लिख सकते हैं? –

उत्तर

3

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

$element.data('uiAutocomplete')._renderItem() 
10

ऐसा लगता है कि यह पिछले संस्करण में बदल गया है:

+1

ओह, बहुत बहुत धन्यवाद! शर्मिंदा यह [एपीआई दस्तावेज़] में शामिल नहीं है (http://api.jqueryui.com/autocomplete) –

+0

यह काम करता है लेकिन वर्तमान दस्तावेज दृष्टिकोण विजेट को विस्तारित करके अपना स्वयं का कस्टम स्वतः पूर्ण बनाना है। नीचे मेरा जवाब देखें। –

3

एक बेहतर दृष्टिकोण का उपयोग करने के लिए है अपने स्वयं के extended version using widgets तैयार करना है।

$.widget("custom.mySpecialAutocomplete", $.ui.autocomplete, { 
    // Add the item's value as a data attribute on the <li>. 
    _renderItem: function(ul, item) { 
    return $("<li>") 
     .attr("data-value", item.value) 
     .append($("<a>").text(item.label)) 
     .appendTo(ul); 
    }, 
    // Add a CSS class name to the odd menu items. 
    _renderMenu: function(ul, items) { 
    var that = this; 
    $.each(items, function(index, item) { 
     that._renderItemData(ul, item); 
    }); 
    $(ul).find("li:odd").addClass("odd"); 
    } 
}); 

var availableTags = [ 
    "ActionScript", 
    "AppleScript", 
    "Asp", 
    "BASIC", 
    "C", 
    "C++", 
    "Clojure", 
    "COBOL", 
    "ColdFusion", 
    "Erlang", 
    "Fortran", 
    "Groovy", 
    "Haskell", 
    "Java", 
    "JavaScript", 
    "Lisp", 
    "Perl", 
    "PHP", 
    "Python", 
    "Ruby", 
    "Scala", 
    "Scheme" 
]; 

$('#myElement').mySpecialAutocomplete({ 
    source: availableTags 
}); 
+0

"बेहतर दृष्टिकोण" - कैसे "केवल काम करता है" के बारे में। इंटरनेट के चारों ओर मिले पुराने सिंटैक्स से मैंने जो भी कोशिश की, वह सब कुछ नहीं हुआ। यह विजेट एक्सटेंशन सिंटैक्स एकमात्र ऐसा है जो मेरे लिए काम करता है। साझा करने के लिए धन्यवाद। यह दुर्भाग्यपूर्ण है कि '_renderItem' के लिए jQuery दस्तावेज़ों में एक पूर्ण उदाहरण नहीं था जैसा आप यहां देते हैं। – Pistos