Simulate Holding Ctrl Key

2019-07-20 18:13发布

问题:

I'm currently trying to change the default behaviour of a multiselect element, so that a user can select and deselect multiple values, without having to press the Ctrl key all the while.

I found a simple solution here, but this does not work in ie8 (because in ie, the onmousedown does not apply to option elements).

But I figured, that one could just simulate a pressed control key, whenever the mouse hovers over a 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);        
    });
});

Why does this not work?

  • Is the Ctrl key directly being released again?
  • Is something wrong with the code?
  • Am I missing something else entirely?

回答1:

You can't simulate such events by programmatically pushing keyboard buttons, just like you can't produce a capital A by simulating the shift key while the user pushes the a key on their keyboard. Besides, even if it would work it wouldn't work: on Macs you press cmd, not ctrl, to select multiple elements.

So unfortunately you'll have to drop this approach and look for other options.



回答2:

You probably need to add a check box for each of your items, rather than a multi select control.

It is easier in code to write functions which uncheck the others when a new one is selected than to prevent this default behaviour.