2013-01-24 32 views
9

我們目前正在使用Chosen Dropdown Plugin這是相當了不起,除了一個小問題。當我們使用單個下拉菜單時,如果您選擇「選擇」控件,則實際的下拉部分不會顯示。但是,將插件應用於多個「選擇」時,它確實會出現。jQuery選擇插件:捕捉焦點打開時掛鉤

已經通過文檔和GitHub的問題,似乎有很多關於標籤排序和聚焦的提及,但似乎沒有處理這個相當簡單的要求;在製表時接收焦點時顯示下拉菜單。

因此,假設這個功能不是插件的一部分,是否有其他選擇,如捕獲錨標籤的焦點?

$('.chzn-single').focus(function(e){ 
    alert('I should be focused!') 
});  

到目前爲止,我還沒有成功,並想知道是否有其他人遇到過這個問題。你可以看看這個jsfiddle演示該問題

回答

8
  1. 你應該跟蹤焦點事件爲搜索輸入那裏面選擇conainer,而不是錨元素,然後觸發鼠標按下事件選擇的容器 - 這就是事件它監聽打開一個下拉

  2. 您需要使用委派事件的方法來處理事件動態添加元素綁定時(jQuery的1.7.1及更早版本,你可能只是用「活」法)

  3. 您還需要檢查容器是否處於活動狀態目前,爲了避免遞歸調用(當選擇下拉菜單被打開 - 搜索輸入將被再次聚焦)

 
$('body').on('focus', '.chzn-container-single input', function() { 
    if (!$(this).closest('.chzn-container').hasClass('chzn-container-active')) 
     $(this).closest('.chzn-container').trigger('mousedown'); 
     //or use this instead 
     //$('#select').trigger('liszt:open'); 
}); 

這裏的工作jsfiddle

而不是$(this).closest('.chzn-container').trigger('mousedown'); 你也可能會觸發插件的內部事件:$('#select').trigger('liszt:open');

+0

小提琴不再工作。也許你可以使用[cdnjs'](http://cdnjs.cloudflare.com/ajax/libs/chosen/1.0/chosen.jquery.js)作爲外部文件? – Jawa

+0

@Jawa你是對的它使用「選擇」js插件,這是不再有問題中使用的鏈接。 我已經更新了jsfiddle,使用你提到的cdn,它稍微有另一個類的選擇控制 - 我相應地在jsfiddle更新它們。 – paulitto

+0

非常感謝!我最終使用: $(document).on(「focus」,「.chosen-container-single input」,function(){$(this).closest('。chosen-container-single')。not 「.chosen-container-active」)。trigger('mousedown');}); – colinbashbash