javascript - 将 HTML 多选输入限制为仅连续元素(仅 +shift,忽略 +ctrl)
问题描述
我有一个标准的 HTML 多选字段,很像 W3 学校的例子:
<select name="cars" size="4" multiple>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="fiat">Fiat</option>
<option value="audi">Audi</option>
</select>
我的功能需要能够选择多个项目(shift + click),但只能选择彼此连续的项目。换句话说,忽略 [ctrl + click] 功能,
例如:
允许:
Volvo
Saab
Fiat
不允许:
Volvo
Fiat
有任何想法吗?我可以在 JS 中进行数据验证和拒绝,但我宁愿一开始就阻止它。
解决方案
由于它不是在select
HTML 组件中原生实现的,因此您肯定需要 JS 来解决这个问题(使用 jQuery)。
为此,您可以在按下 CTRL 键时禁用选择:
let ctrlKeyPressed = false;
$(function() {
document.onkeydown = function(e) {
if (e.key == 'Meta' || e.key == 'CTRL') {
ctrlKeyPressed = true;
}
}
document.onkeyup = function(e) {
if (e.key == 'Meta' || e.key == 'CTRL') {
ctrlKeyPressed = false;
}
}
});
$("option").mousedown(function(e) {
if (ctrlKeyPressed) {
e.preventDefault();
}
});
你会在这里找到完整的工作小提琴
推荐阅读
- r - dplyr 将两个数据集与条件连接在一起
- reactjs - 如何防止用户返回 react-router-dom?
- java - 为什么 Map.put() 会覆盖现有键/值对中的现有值?
- python - 如何计算 3 个时间序列的广义矩,即 3 个时间序列之间的 coskew 和 4 个时间序列之间的 cokurtosis 等
- node.js - node.js 中 https.get 的重试逻辑
- reactjs - 重构为 React 钩子时的身份验证侦听器
- python - 如何在不重新启动笔记本的情况下清除 jupyter 内存
- unity3d - Unity - 使用 GetRawTextureData 更改底层 RGB 字节而不复制
- angular - 具有相同名称/字段的角材料多个 mat-radio-group
- python - 驱动程序查找元素