javascript - 动态添加一个选择元素到div,mousedown事件阻止下拉菜单打开
问题描述
有一个 DIV 元素(id:容器),它附加了一个 mousedown 事件处理程序。然后我使用 document.createElement(...) 和 append(...) 在其中添加了一个选择元素。问题是当我单击选择元素的箭头时,下拉列表没有打开。请注意,容器元素是现有网页/crm 的一部分。它不能被修改。
// container:
$("#container").on('mousedown.something', function (event) {
event.preventDefault();
// some other code
});
// append a select to the container
var numbers = ["Numbers", "1", "2", "3"];
var list = document.createElement('select');
list.setAttribute("id", "dropdown");
for (var i = 0; i < numbers.length; i++) {
var opt = document.createElement('option');
opt.innerHTML = numbers[i];
opt.value = numbers[i];
list.appendChild(opt);
}
$('#container').append(list);
jsfiddle: https ://jsfiddle.net/tomsx/8tLjcgbh/
解决方案
您可以e.stopPropagation()
在select
mousedown 事件上使用
$("#container").on('mousedown.something', function(event) {
event.preventDefault();
console.log('MouseDown');
// some other code
});
var numbers = ["Numbers", "1", "2", "3"];
var list = document.createElement('select');
list.setAttribute("id", "dropdown");
for (var i = 0; i < numbers.length; i++) {
var opt = document.createElement('option');
opt.innerHTML = numbers[i];
opt.value = numbers[i];
list.appendChild(opt);
}
$('#container').append(list);
//stop the container mousedown from the created select
$('#container').on('mousedown' , '> select' , function(e){
e.stopPropagation();
});
#container {
width: 200px;
margin: auto;
border: 3px solid #73AD21;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="container">Click me</div>
推荐阅读
- javascript - 如何通过 Chrome 扩展更改 Chrome 系统页面标题?
- javascript - 使按钮居中
- reactjs - 通过 Storybook 中的 args 传递的片段使用组件状态?
- oop - 如何编写紧密耦合的工厂设计模式代码块的Xunit测试用例?
- c# - 如何使用 Linq 根据用户属于另一个表的位置来查询表
- azure - 从 Azure 数据工厂中的单个表创建多个 CSV 文件
- ubuntu - 带有 Post Auth 硬件地址检查脚本的 OpenVPN 社区版
- plot - 朱莉娅情节适用于颜色的哪个功能?
- php - GraphQL 不是自我记录的
- excel - VBA 错误 1004:范围类的复制方法失败