Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.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 模拟按住Ctrl键_Javascript_Jquery_Events_Keydown_Multi Select - Fatal编程技术网

Javascript 模拟按住Ctrl键

Javascript 模拟按住Ctrl键,javascript,jquery,events,keydown,multi-select,Javascript,Jquery,Events,Keydown,Multi Select,我目前正在尝试更改multiselect元素的默认行为,以便用户可以选择和取消选择多个值,而无需一直按Ctrl键 我找到了一个简单的解决方案,但这在ie8中不起作用(因为在ie中,onmousedown) 但我认为,只要鼠标悬停在multiselect上,就可以模拟按下控制键: $(document).ready(function() { $('select').hover(function(e) { var kde = jQuery.Event("keydown");

我目前正在尝试更改multiselect元素的默认行为,以便用户可以选择和取消选择多个值,而无需一直按Ctrl键

我找到了一个简单的解决方案,但这在ie8中不起作用(因为在ie中,
onmousedown

但我认为,只要鼠标悬停在multiselect上,就可以模拟按下控制键:

$(document).ready(function() {
    $('select').hover(function(e) {
        var kde = jQuery.Event("keydown");
        kde.ctrlKey = true;  //something like this
        kde.keyCode = 17;    //or this - i don't know
        $(e.target).trigger(kde);        
    });
});
为什么这不起作用

  • 是否再次直接释放Ctrl键
  • 代码有问题吗
  • 我完全错过了什么吗

您无法通过编程方式按下键盘按钮来模拟此类事件,就像您无法在用户按下键盘上的a键时通过模拟shift键来生成大写字母a一样。此外,即使它能工作,它也不会工作:在Mac电脑上,你按cmd键,而不是ctrl键来选择多个元素


因此,不幸的是,您将不得不放弃这种方法并寻找其他选项。

您可能需要为每个项目添加一个复选框,而不是一个多选控件


在代码中,在选择新函数时,编写不选中其他函数的函数比防止这种默认行为更容易。

我认为可能是这样,有人这么说。但我认为它可能仍然可以工作,因为它不会调用浏览器功能(对吗?)。谢谢您的回答是的复选框可以解决控制键的问题。但是,由于在这个特定的select中有如此多的值,复选框对于用户来说是不切实际的。无论如何,谢谢你能不能把很长的复选框列表放入你自己的可滚动div中,有效地创建你自己的列表控件?虽然这是可能的,但我认为这并不比本机控件好(有缺点…)