2013-01-24 24 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