JQuery or [removed] How determine if shift key being pressed while clicking anchor tag hyperlink?

前端 未结 12 1923
别那么骄傲
别那么骄傲 2020-11-27 03:00

I have an anchor tag that calls a JavaScript function.

With or without JQuery how do I determine if the shift key is down while the link is clicked?

The foll

相关标签:
12条回答
  • 2020-11-27 03:40

    A more modular approach plus the ability to keep your this scope in the listeners:

    var checkShift = function(fn, self) {
      return function(event) {
        if (event.shiftKey) {
          fn.call(self, event);
        }
        return true;
      };
    };
    
    $(document).on('keydown', checkShift(this.enterMode, this));
    
    0 讨论(0)
  • 2020-11-27 03:42

    Here is the key code for each key stroke in JavaScript. You can use that and detect if the user has pressed the Shift key.

    backspace           8
    tab                 9
    enter               13
    shift               16
    ctrl                17
    alt                 18
    pause/break         19
    caps lock           20
    escape              27
    page up             33
    page down           34
    end                 35
    home                36
    left arrow          37
    up arrow            38
    right arrow         39
    down arrow          40
    insert              45
    delete              46
    0                   48
    1                   49
    2                   50
    3                   51
    4                   52
    5                   53
    6                   54
    7                   55
    8                   56
    9                   57
    a                   65
    b                   66
    c                   67
    d                   68
    e                   69
    f                   70
    g                   71
    h                   72
    i                   73
    j                   74
    k                   75
    l                   76
    m                   77
    n                   78
    o                   79
    p                   80
    q                   81
    r                   82
    s                   83
    t                   84
    u                   85
    v                   86
    w                   87
    x                   88
    y                   89
    z                   90
    left window key     91
    right window key    92
    select key          93
    numpad 0            96
    numpad 1            97
    numpad 2            98
    numpad 3            99
    numpad 4            100
    numpad 5            101
    numpad 6            102
    numpad 7            103
    numpad 8            104
    numpad 9            105
    multiply            106
    add                 107
    subtract            109
    decimal point       110
    divide              111
    f1                  112
    f2                  113
    f3                  114
    f4                  115
    f5                  116
    f6                  117
    f7                  118
    f8                  119
    f9                  120
    f10                 121
    f11                 122
    f12                 123
    num lock            144
    scroll lock         145
    semi-colon          186
    equal sign          187
    comma               188
    dash                189
    period              190
    forward slash       191
    grave accent        192
    open bracket        219
    back slash          220
    close braket        221
    single quote        222
    

    Not all browsers handle the keypress event well, so use either the key up or the key down event, like this:

    $(document).keydown(function (e) {
        if (e.keyCode == 16) {
            alert(e.which + " or Shift was pressed");
        }
    });
    
    0 讨论(0)
  • 2020-11-27 03:42

    If anyone's looking to detect a given key and needs to know the status of the "modifiers" (as they are called in Java), i.e. Shift, Alt and Control keys, you can do something like this, which responds to keydown on key F9, but only if none of the Shift, Alt or Control keys is currently pressed.

    jqMyDiv.on( 'keydown', function( e ){
        if( ! e.shiftKey && ! e.altKey && ! e.ctrlKey ){
            console.log( e );
            if( e.originalEvent.code === 'F9' ){
              // do something 
            }
        }
    });
    
    0 讨论(0)
  • 2020-11-27 03:50

    The keypress event isn't triggered by all browsers when you click shift or ctrl, but fortunately the keydown event is.

    If you switch out the keypress with keydown you might have better luck.

    0 讨论(0)
  • 2020-11-27 03:51

    I had a similar problem, trying to capture a 'shift+click' but since I was using a third party control with a callback rather than the standard click handler, I didn't have access to the event object and its associated e.shiftKey.

    I ended up handling the mouse down event to record the shift-ness and then using it later in my callback.

        var shiftHeld = false;
        $('#control').on('mousedown', function (e) { shiftHeld = e.shiftKey });
    

    Posted just in case someone else ends up here searching for a solution to this problem.

    0 讨论(0)
  • 2020-11-27 03:51
    var shiftDown = false;
    this.onkeydown = function(evt){
        var evt2 = evt || window.event;
        var keyCode = evt2.keyCode || evt2.which;       
        if(keyCode==16)shiftDown = true;
    }
    this.onkeyup = function(){
        shiftDown = false;
    }
    

    demo

    0 讨论(0)
提交回复
热议问题