2012-12-21 22 views
13

Otomatik tamamlamanın oluşturduğu menü nesnesine bir başvuru alabilmek istiyorum (örneğin .attr("id")'u alabilirim) ancak jQuery/javascript ile çok aşina değilim.jQuery UI otomatik tamamlama aracı - menüden nasıl başvuru alınır?

https://github.com/jquery/jquery-ui/blob/1-9-stable/ui/jquery.ui.autocomplete.js#L182

yüzden etrafında uçan bir nesne yoktur, sadece bunun nasıl ulaşacağımı bulmak gibi olamaz: Kaynakta, bunu buldum. Böyle kendisine bağlı bir otomatik tamamlama ile bir giriş var ise

Yani, örneğin,:

// input = reference to the input text box on the form 
input.autocomplete({ 
    select: function(event, ui) { 
    // how to get the reference here? 

    // some things I've tried 
    // return input.menu 
    // return input.data("menu") 
    // and a few others but they didn't work either 
    } 
}); 

Veri nesnenin kendisi bakarak çalıştı ancak harcayabilirsiniz pek çok seçenek vardı Bütün gün bakarak ve hala aradığımı bulamıyorum. Herhangi bir yardım veya içgörü çok takdir edilmektedir.

cevap

15

Widget'ın referansını, kök elemanına (giriş) atanmış veri kümesine bakarak alabilirsiniz. Sonra menü özelliği (ve onun altında yatan öğe) getirme çok önemsiz.)

select: function(event, ui) { 
    // that's how get the menu reference: 
    var widget = $(this).data('ui-autocomplete'), 
     menu = widget.menu, 
     $ul = menu.element, 
     id  = $ul.attr('id'); // or $ul[0].id 
    } 

... Bu işlev, bir olay işleyicisi olarak adlandırılan zaman thisselect içinde işlev <input> değinmektedir.

+3

Minör nitpick verir: Gönderen jQuery UI 1.9'dan itibaren, widget'i kalifiye olmayan adından erişerek kullanımdan kaldırılır, ve 1.10'da desteklenmeyecek. Nitelikli ismi burada kullanmak en iyisi olabilir: 'var widget = $ (this) .data (" ui-autocomplete ")'. –

+0

@ FrédéricHamidi Teşekkürler, bilmiyordum; cevabı günceller (ve benim de kodumdan bazıları). – raina77ow

+0

Bu işe yarıyor. Yardımın için teşekkürler, çok takdir ediyor. – iain

5

Bunu yapmanın basit bir yolu: Bu aynı yapar $(this).autocomplete('widget');
:

select: function(event, ui) { 
// that's how get the menu reference: 
var widget = $(this).data('ui-autocomplete'), 
    menu = widget.menu, 
    $ul = menu.element, 
    id  = $ul.attr('id'); // or $ul[0].id 

}

O ül listesine

$(this).autocomplete('widget').attr('id');

İlgili konular