Select2 onChange 事件取消了我在 Firefox 中的 scrollTop 命令
Select2 onChange event cancels my scrollTop command in Firefox
我广泛使用 Select2。我正在尝试 运行 $('html,body').scrollTop()
在 Select2 .on('change')
事件中运行,但它无法正常工作。我的代码:
$('.category_select').on('change', function(e){
var scroll_pos = $('#category_'+$(this).select2('val')).offset().top;
$('html,body').scrollTop(scroll_pos);
});
如果滚动位置大于 select2 元素的顶部偏移量,则 select2 将重新定位滚动,以便 select2 元素保持可见。我该如何解决这个问题?
更新:
我创建了 fiddle 来显示这个问题 http://jsfiddle.net/83acq8hp/2/。此问题仅存在于 Firefox 中。在 Safari 和 Chrome 中正常工作,但在 Firefox 中 fiddle 显示不正常。
您在 Firefox 中发现 "bug" 不错。
如果您更改选项的时间足够长,您会看到滚动条向下移动到正确的选项,然后再次向上移动到 select2(这真的很快,所以您需要查看滚动条才能看到它).
这让我想到滚动部分可以工作,但某些东西迫使显示 select2 输入。所以,我的赌注是 focus
.
This jsfiddle 展示了我的调试过程,这是你应该用来解决它的代码:
$('#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
的代码属于 this answer and you can check this working jsfiddle,没有调试噪声。
我广泛使用 Select2。我正在尝试 运行 $('html,body').scrollTop()
在 Select2 .on('change')
事件中运行,但它无法正常工作。我的代码:
$('.category_select').on('change', function(e){
var scroll_pos = $('#category_'+$(this).select2('val')).offset().top;
$('html,body').scrollTop(scroll_pos);
});
如果滚动位置大于 select2 元素的顶部偏移量,则 select2 将重新定位滚动,以便 select2 元素保持可见。我该如何解决这个问题?
更新:
我创建了 fiddle 来显示这个问题 http://jsfiddle.net/83acq8hp/2/。此问题仅存在于 Firefox 中。在 Safari 和 Chrome 中正常工作,但在 Firefox 中 fiddle 显示不正常。
您在 Firefox 中发现 "bug" 不错。
如果您更改选项的时间足够长,您会看到滚动条向下移动到正确的选项,然后再次向上移动到 select2(这真的很快,所以您需要查看滚动条才能看到它).
这让我想到滚动部分可以工作,但某些东西迫使显示 select2 输入。所以,我的赌注是 focus
.
This jsfiddle 展示了我的调试过程,这是你应该用来解决它的代码:
$('#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
的代码属于 this answer and you can check this working jsfiddle,没有调试噪声。