2013-07-08 109 views
1

我們在一行(只是一個div)中有一個select2下拉菜單,我們需要能夠點擊整行來觸發下拉菜單。我沒有任何問題表明它,但試圖隱藏它已成爲一個問題,我想知道我的邏輯是否有缺陷。 select2 AFAIK在我們所使用的版本上沒有切換方法,所以我必須手動使用它的打開和關閉方法。這是我試過的。從不同的元素切換select2

$('[data-variable-type=select]').on('click', function(e){ 
    e.stopPropagation(); 
    var _dropdown = $(this).find('div.interface_dropdown'); 
    if(_dropdown.hasClass('select2-dropdown-open')) { 
    $(this).find('select.interface_dropdown').select2('close'); 
    } 
    else { 
    $(this).find('select.interface_dropdown').select2('open'); 
    } 
}); 

這將導致它正常打開,但是當您單擊關閉時,關閉鼠標按下上重新出現,但在鼠標鬆開。

有什麼方法可以正確切換嗎?

回答

1

你會發布相關的HTML嗎?沒有看到內容,很難理解你在做什麼。

$('[data-variable-type=select]').on('click', function(e){ 
    e.stopPropagation(); 
    var _dropdown = $(this).find('div.interface_dropdown'); 
    if(_dropdown.hasClass('select2-dropdown-open')) { 
     _dropdown.removeClass('select2-dropdown-open'); 
     _dropdown.select2('close'); 
    } else { 
     _dropdown.select2('open'); 
     _dropdown.addClass('select2-dropdown-open'); 
    } 
}); 

它看起來像忘了添加/刪除類,也許這會更好嗎?再一次,我在黑暗中感覺到這裏沒有看到你的內容。

+0

我相信選擇2的「打開」和「關閉」方法自動搞定。 –

0
if(_dropdown.hasClass('select2-dropdown-open')) { 
$(this).find('select.interface_dropdown').select2('close'); 
} 

在選擇2(3.3+ IIRC),這將永遠不會觸發因爲打開時,選擇2創建在整個瀏覽器的透明面罩和監聽點擊事件更高版本。當掩碼被點擊時,當前打開的select2被關閉。這是在用戶準備好做其他事情時關閉select2的唯一可靠方法。

+0

謝謝,我們現在正在升級我們的版本,如果我們取得進展,我會通知您:) –

0

正確的方法是:

$('select').data('select2').toggleDropdown()