首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Select2 onChange事件取消了火狐中的scrollTop命令

Select2 onChange事件取消了火狐中的scrollTop命令
EN

Stack Overflow用户
提问于 2015-02-27 13:14:23
回答 1查看 1.4K关注 0票数 1

我正在广泛地使用Select2。我试图在Select2 .on('change')事件中运行Select2函数,但它不能正常工作。我的代码:

代码语言:javascript
复制
$('.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中,就像小提琴显示的那样。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-03 12:22:14

你在Firefox中找到了一个很好的"bug“。

如果您更改这些选项足够长的时间,您将看到滚动条下降到正确的选项,然后再次显示到select2 (这非常快,因此您需要查看滚动条才能看到它)。

这让我认为滚动部分可以工作,但是有东西迫使select2输入显示出来。所以,我赌的是focus

这弹琴演示了我的调试过程,您应该使用以下代码来解决这个问题:

代码语言:javascript
复制
$('#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将显示具有焦点的元素。

我为select2-close使用的代码属于这个答案,您可以在没有调试噪声的情况下检查这个工作上的小把戏

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28766016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档