解决方案 1
我找到了非常简单的解决方案。
select.style.display = "none";
setTimeout(function () {
select.style.display = "block";
}, 10);
这个隐藏在 DOM 中的元素,这导致下拉菜单将被关闭,然后延迟 10 毫秒(没有延迟它不起作用)将它返回到 DOM。
解决方案 2:稍微复杂一点但没有延迟的是从 DOM 中完全删除元素,然后立即将其返回。
var parent = select.parentElement;
var anchor = document.createElement("div");
parent.insertBefore(anchor, select);
parent.removeChild(select);
parent.insertBefore(select, anchor);
parent.removeChild(anchor);
这存储了元素的父级,然后在选择之前带上锚。Anchor 用于在 DOM 之前的相同位置恢复选择。当然它可以实现为功能选择元素。
HTMLSelectElement.prototype.closeDropdown = function () {
var parent = this.parentElement;
var anchor = document.createElement("div");
parent.insertBefore(anchor, this);
parent.removeChild(this);
parent.insertBefore(this, anchor);
parent.removeChild(anchor);
}
然后打电话
select.closeDropdown();
例子