Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 向div动态添加一个select元素,mousedown事件阻止打开下拉列表_Javascript_Jquery - Fatal编程技术网

Javascript 向div动态添加一个select元素,mousedown事件阻止打开下拉列表

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

有一个DIV元素id:container,它附加了一个mousedown事件处理程序。然后,我使用document.createElement将一个select元素附加到其中。。。并附加。。。。 问题是,当我单击select元素的箭头时,下拉列表不会打开。 请注意,容器元素是现有网页/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:

您的事件是在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;iselect',函数E{ e、 停止传播; }; 容器{ 宽度:200px; 保证金:自动; 边框:3px实心73AD21; }
单击“我”没有其他可能性吗?容器不能如上所述进行修改:请注意,容器元素是现有网页/crm的一部分。无法修改。除了修改事件处理程序之外,是否没有其他可能性?容器不能如上所述进行修改:请注意,容器元素是现有网页/crm的一部分。无法修改。您可以创建一个覆盖此事件处理程序的新事件处理程序