javascript - 选择更改时阻止多个选择滚动到顶部

标签 javascript select scroll block

当我选择一个选项时,如何禁止滚动到所选项目的顶部?很简单,用js实现多选,不用clrt+C就可以用多选,代码下来。

window.onmousedown = function (e) {

    var el = e.target;

    if (el.tagName.toLowerCase() == 'option' && el.parentNode.hasAttribute('multiple')) {

        e.preventDefault();

        // toggle selection
        if (el.hasAttribute('selected')) 
            el.removeAttribute('selected');
        else 
            el.setAttribute('selected', '');

        // hack to correct buggy behavior
        var select = el.parentNode.cloneNode(true);
        el.parentNode.parentNode.replaceChild(select, el.parentNode);
    }
}

最佳答案

您可以保存之前的scrollTop位置并重新应用它,如下所示:

window.onmousedown = function (e) {
    var el = e.target;

    if (el.tagName.toLowerCase() == 'option' && el.parentNode.hasAttribute('multiple')) {

        e.preventDefault();

        // save scroll state
        var yeOldeScroll = el.scrollTop;

        // toggle selection
        if (el.hasAttribute('selected')) {
            el.removeAttribute('selected');
        } else {
            el.setAttribute('selected', '');
        }

        // re-apply scroll state
        el.scrollTop = yeOldeScroll;

        // hack to correct buggy behavior
        var select = el.parentNode.cloneNode(true);
        el.parentNode.parentNode.replaceChild(select, el.parentNode);
    }
}

关于javascript - 选择更改时阻止多个选择滚动到顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46193770/

相关文章:

javascript - 使用按钮传递 URL 参数

javascript - 文件路径字符串数组到文件树 JSON(与 react-sortable-tree 兼容)

javascript - 如何通过递归使用 setTimeout 来等待在 JavaScript 中定义变量?

javascript - 百分比图表 CSS3 动画,在 View 上开始,滚动后,而不是在页面加载时

javascript - npmjs.com 如何计算代码质量

javascript - 在 selectize api 下拉列表中获取 select 的当前索引

sql - 如何在 WHERE 子句中编写带有 SELECT 语句的 SQL DELETE 语句?

php - 在 select for MYSQL 中选择

ios - iframe 在 ios 上滚动固定 div 不起作用

jquery - 显示隐藏的 div 时停止页面滚动