Jquery Select2 onChange事件取消Firefox中的我的scrollTop命令
我广泛使用Select2。我正在尝试运行Select2Jquery Select2 onChange事件取消Firefox中的我的scrollTop命令,jquery,scroll,jquery-select2,Jquery,Scroll,Jquery Select2,我广泛使用Select2。我正在尝试运行Select2.on('change')事件中的$('html,body').scrollTop()函数,但它无法正常工作。我的代码: $('.category_select').on('change', function(e){ var scroll_pos = $('#category_'+$(this).select2('val')).offset().top; $('html,body').scrollTop(scroll_pos)
.on('change')
事件中的$('html,body').scrollTop()函数,但它无法正常工作。我的代码:
$('.category_select').on('change', function(e){
var scroll_pos = $('#category_'+$(this).select2('val')).offset().top;
$('html,body').scrollTop(scroll_pos);
});
如果滚动位置大于select2元素的顶部偏移量,则select 2将重新定位滚动,以便select2元素保持可见。我怎么能绕过这个
更新:
我已经创造了小提琴,显示了这个问题。这个问题只存在于Firefox中。在Safari和Chrome中,它可以正常工作,但在Firefox中却无法正常工作。你在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将显示具有焦点的元素
我用于select2 close
的代码属于,您可以在没有调试噪音的情况下进行检查。您可以提供一个JSFIDLE来演示您的问题吗?我将尝试设置它。嗯,我创建了一个FIDLE来演示问题,但它按预期工作:S。在我的应用程序中,它不会像fiddle中显示的那样工作,滚动总是在选择元素处停止。可能是selec2的版本,我需要做进一步的测试…@milz这个问题只存在于Firefox中。你可以查看上面的小提琴:非常感谢@milz。我怀疑select2中的某些东西正迫使scroll停止。非常感谢你的帮助。也许我应该把这个问题提交给Select2我很高兴我能帮助你。是的,你可以在GitHub上提交一个问题。现在确定他们是否可以做些什么,因为这个问题只发生在Firefox上。