多个 select 在 selection 之后上升
Multiple select goes up after selection
我正在使用 Google App Script 在 Google 张中打开一个 HTML 表单。
我在过滤器表单中使用了两个多下拉菜单。我使用了一个代码来避免 ctrl + click 当用户 selects 选项时。过滤器有效,但有一个错误:当我向下滚动并 select 一个选项时,该选项是 selected 但下拉列表自动上升。
这是我的错误代码 () :
// Allows to select mutiple options in a multiple select form without ctrl + click
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);
}
}
我已经做了一些研究来解决这个问题,并尝试将一些解决方案合并到我的代码中,我认为这些解决方案已经接近我正在寻找的东西:
但是我没有成功
感谢您的回答。
我认为可能有更好的方法,但您可以尝试:
let selectTop;
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', '');
selectTop = el.parentNode.scrollTop;
}
}
document.querySelector('select').addEventListener('scroll', (e) => {
if (selectTop) { e.target.scrollTop = selectTop };
selectTop = 0;
});
<h4>From</h4>
<div>
<select name="sites-list" size="7" multiple>
<option value="site-1">SITE</option>
<option value="site-2" selected>SITE</option>
<option value="site-3">SITE</option>
<option value="site-4">SITE</option>
<option value="site-5">SITE</option>
<option value="site-6" selected>SITE</option>
<option value="site-7">SITE</option>
<option value="site-8">SITE</option>
<option value="site-9">SITE</option>
</select>
</div>
我正在使用 Google App Script 在 Google 张中打开一个 HTML 表单。
我在过滤器表单中使用了两个多下拉菜单。我使用了一个代码来避免 ctrl + click 当用户 selects 选项时。过滤器有效,但有一个错误:当我向下滚动并 select 一个选项时,该选项是 selected 但下拉列表自动上升。
这是我的错误代码 () :
// Allows to select mutiple options in a multiple select form without ctrl + click
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);
}
}
我已经做了一些研究来解决这个问题,并尝试将一些解决方案合并到我的代码中,我认为这些解决方案已经接近我正在寻找的东西:
但是我没有成功
感谢您的回答。
我认为可能有更好的方法,但您可以尝试:
let selectTop;
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', '');
selectTop = el.parentNode.scrollTop;
}
}
document.querySelector('select').addEventListener('scroll', (e) => {
if (selectTop) { e.target.scrollTop = selectTop };
selectTop = 0;
});
<h4>From</h4>
<div>
<select name="sites-list" size="7" multiple>
<option value="site-1">SITE</option>
<option value="site-2" selected>SITE</option>
<option value="site-3">SITE</option>
<option value="site-4">SITE</option>
<option value="site-5">SITE</option>
<option value="site-6" selected>SITE</option>
<option value="site-7">SITE</option>
<option value="site-8">SITE</option>
<option value="site-9">SITE</option>
</select>
</div>