即使已经选中了单击的select2选项,也总是触发的“change”-event

我有一个原生的 -element,我正在初始化一个select2-downdown菜单。 我通过select2绑定了一个change-event,只要select2 / select-option被改变就会被调用。 但是,即使再次选择当前选定的选项,我也需要触发事件。

 function onSelectChange(){ alert('changed'); }; $("#select").select2().bind('change', onSelectChange); 

我准备了一个http://jsfiddle.net/rb6pH/1/ – 如果当前选择了“Alaska”,然后通过select2-dropdown再次选择,onSelectChange()将再次触发,触发警报。

我很难表达自己,请问一些事情是否不够明确。

这里也提出了类似的问题。 我根据链接中的代码为您的问题做了一个小提琴。 http://jsfiddle.net/rb6pH/55/

 function onSelectChange(){ alert('changed'); }; var select2 = $("#select").select2().data('select2'); select2.onSelect = (function(fn) { return function(data, options) { var target; if (options != null) { target = $(options.target); } if (target) { onSelectChange(); return fn.apply(this, arguments); } } })(select2.onSelect); 

受到@FritsvanCampen绝对有效的评论的启发,我坐下来自己想出了一个方法:我真正需要的是一种方法来访问当前选择的val ,即使它没有改变。 通过使用select2的未记录的close -event而不是change ,我可以像这样访问:

 function onSelectChange(event){ alert( $("#select").select2("val") ); }; $("#select").select2().bind('close', onSelectChange); 

在http://jsfiddle.net/rb6pH/42/上找到更新的jsFiddle

我想你可能会参考这个链接,我在同样的情况下陷入困境,

使用Select2的val()方法更改选择时,不会触发更改事件。

事件对象包含以下自定义属性:

VAL

当前选择(考虑到更改的结果) – id或id数组。

添加

添加的元素,如果有的话 – 完整的元素对象,而不仅仅是id

去除

删除的元素,如果有的话 – 完整的元素对象,而不仅仅是id

有关详细信息,请参阅此内容 。

谢谢!

我读了这个问题,它离我的问题很近,所以我决定不发布另一个问题。 我想要做的是在select2关闭后,一个简单的文本输入变得集中但它不起作用。 请检查

 function onSelectChange(){ alert('closed'); $('#hey').focus(); }; $("#select").select2().bind('close', onSelectChange); $('#hey').on('focusin)', function(){alert('in');} 

http://jsfiddle.net/sobhanattar/x49F2/5/

我试图确保输入变得集中,它表明输入变得集中但我不知道为什么它没有显示光标

  var prev_val = $('#select2').val(); $('#select2').blur( function() { if( $(this).val() == prev_val ) // not changed else { // changed prev_val = $(this).val(); } });