Javascript 向div动态添加一个select元素,mousedown事件阻止打开下拉列表
有一个DIV元素id:container,它附加了一个mousedown事件处理程序。然后,我使用document.createElement将一个select元素附加到其中。。。并附加。。。。 问题是,当我单击select元素的箭头时,下拉列表不会打开。 请注意,容器元素是现有网页/crm的一部分。它不能被修改Javascript 向div动态添加一个select元素,mousedown事件阻止打开下拉列表,javascript,jquery,Javascript,Jquery,有一个DIV元素id:container,它附加了一个mousedown事件处理程序。然后,我使用document.createElement将一个select元素附加到其中。。。并附加。。。。 问题是,当我单击select元素的箭头时,下拉列表不会打开。 请注意,容器元素是现有网页/crm的一部分。它不能被修改 // container: $("#container").on('mousedown.something', function (event) { event.prevent
// 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:
您的事件是在select上触发的,也是容器的一部分,因此只有在单击容器元素时,您才需要触发鼠标向下移动
$("#container").on('mousedown.something', function(event) {
if($(event.target).is('#container')) {
event.preventDefault();
// some other code
}
});
参考:
被动:一个布尔值,如果为true,则表示侦听器指定的函数永远不会调用默认值。如果被动侦听器调用preventDefault,则用户代理只会生成控制台警告。有关详细信息,请参阅使用被动侦听器提高滚动性能。
因此,您需要在addEventlistener中设置passive:true
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);
$("#container").on('mousedown.something', function (event) {
event.preventDefault();
// some other code
},{passive:true});
您可以在select mousedown事件上使用e.stopPropagation
$container.on'mousedown.something',functionevent{
违约事件;
console.log'MouseDown';
//其他代码
};
变量数=[数,1,2,3];
var list=document.createElement'select';
list.setAttributeid,下拉列表;
对于var i=0;i单击“我”没有其他可能性吗?容器不能如上所述进行修改:请注意,容器元素是现有网页/crm的一部分。无法修改。除了修改事件处理程序之外,是否没有其他可能性?容器不能如上所述进行修改:请注意,容器元素是现有网页/crm的一部分。无法修改。您可以创建一个覆盖此事件处理程序的新事件处理程序