我正在广泛地使用Select2。我试图在Select2 .on('change')
事件中运行Select2函数,但它不能正常工作。我的代码:
$('.category_select').on('change', function(e){
var scroll_pos = $('#category_'+$(this).select2('val')).offset().top;
$('html,body').scrollTop(scroll_pos);
});
如果滚动位置更大,那么select2元素的顶部偏移量,然后选择2将重新定位滚动,使select2元素保持可见。我怎么才能绕开这条路?
更新:
我创造了小提琴,显示了这个问题,http://jsfiddle.net/83acq8hp/2/。这个问题只存在于Firefox中。在Safari和Chrome中,它正常工作,但在Firefox中,就像小提琴显示的那样。
发布于 2015-03-03 12:22:14
你在Firefox中找到了一个很好的"bug“。
如果您更改这些选项足够长的时间,您将看到滚动条下降到正确的选项,然后再次显示到select2 (这非常快,因此您需要查看滚动条才能看到它)。
这让我认为滚动部分可以工作,但是有东西迫使select2输入显示出来。所以,我赌的是focus
。
这弹琴演示了我的调试过程,您应该使用以下代码来解决这个问题:
$('#mySelect').select2();
$('#mySelect').on("change", function(e) {
var element = '#test'+$(this).select2('val');
var scroll_pos = $(element).offset().top;
$('html,body').scrollTop(scroll_pos);
})
.on("select2-close", function () {
setTimeout(function() {
$('.select2-container-active').removeClass('select2-container-active');
$(':focus').blur();
}, 1);
});
基本上,您需要使用事件select2-close
从select2输入中移除焦点。否则,Firefox将显示具有焦点的元素。
https://stackoverflow.com/questions/28766016
复制相似问题