복붙노트

[JQUERY] 캔의 jQuery .keypress () 더 동시에 하나의 키보다 감지?

JQUERY

캔의 jQuery .keypress () 더 동시에 하나의 키보다 감지?

해결법


  1. 1.여러 개의 키를 감지하기 위해, 아래 개최를 keyDown과의 keyup 이벤트를 사용하고.

    여러 개의 키를 감지하기 위해, 아래 개최를 keyDown과의 keyup 이벤트를 사용하고.

    var keys = {};
    
    $(document).keydown(function (e) {
        keys[e.which] = true;
    });
    
    $(document).keyup(function (e) {
        delete keys[e.which];
    });
    

    여기 데모를 함께 넣어했습니다 http://jsfiddle.net/gFcuU/. 내 키보드는 대부분의 6 키에서 감지 할 경우에만 할 수있다 발견하더라도 그것은 재미의 종류입니다.


  2. 2.때에 따라 다르지. "정상"키를 들면, 수단 비 시프트, Ctrl 키, Alt, (CMD)는, 대답은 '노 것으로, 이벤트 핸들러는, 큐에 / 잇달아 불을 잡을 수 없습니다.

    때에 따라 다르지. "정상"키를 들면, 수단 비 시프트, Ctrl 키, Alt, (CMD)는, 대답은 '노 것으로, 이벤트 핸들러는, 큐에 / 잇달아 불을 잡을 수 없습니다.

    제가 위에서 언급 한 수정 키를 들어, 이벤트 객체의 속성이 있습니다.

    예:

    $(document).bind('keypress', function(event) {
        if( event.which === 65 && event.shiftKey ) {
            alert('you pressed SHIFT+A');
        }
    });
    

    Js 휘티 d 혀라도.

    다른 속성은 다음과 같습니다 :


  3. 3.당신은 단지 몇 가지 키를 직렬 누르면 핸들러를 발사 같은 것을 시도하려는 경우 :

    당신은 단지 몇 가지 키를 직렬 누르면 핸들러를 발사 같은 것을 시도하려는 경우 :

    jQuery.multipress = function (keys, handler) {
        'use strict';
    
        if (keys.length === 0) {
            return;
        }
    
        var down = {};
        jQuery(document).keydown(function (event) {
            down[event.keyCode] = true;
        }).keyup(function (event) {
            // Copy keys array, build array of pressed keys
            var remaining = keys.slice(0),
                pressed = Object.keys(down).map(function (num) { return parseInt(num, 10); }),
                indexOfKey;
            // Remove pressedKeys from remainingKeys
            jQuery.each(pressed, function (i, key) {
                if (down[key] === true) {
                    down[key] = false;
                    indexOfKey = remaining.indexOf(key);
                    if (indexOfKey > -1) {
                        remaining.splice(indexOfKey, 1);
                    }
                }
            });
            // If we hit all the keys, fire off handler
            if (remaining.length === 0) {
                handler(event);
            }
        });
    };
    

    예를 들어, S-t에 화재,

    jQuery.multipress([83, 84], function () { alert('You pressed s-t'); })
    

  4. 4.아니. 같은 CTRL, ALT 및 SHIFT와 같은 수정 키 위해, 당신이 다른 하나의 열쇠입니다 너무 오래로, 다른 키와 조합 수를 제외하고 -의 키는 누를 때마다 각각의 키에 대해 실행됩니다.

    아니. 같은 CTRL, ALT 및 SHIFT와 같은 수정 키 위해, 당신이 다른 하나의 열쇠입니다 너무 오래로, 다른 키와 조합 수를 제외하고 -의 키는 누를 때마다 각각의 키에 대해 실행됩니다.


  5. 5.다음은 jQuery를 솔루션에 기반으로 마치에이의 대답 https://stackoverflow.com/a/21522329/

    다음은 jQuery를 솔루션에 기반으로 마치에이의 대답 https://stackoverflow.com/a/21522329/

    // the array to add pressed keys to
    var keys = [];
    // listen for which key is pressed
    document.addEventListener('keydown', (event) => {
        if ($.inArray(event.keyCode, keys) == -1) {
            keys.push(event.keyCode);
        }
        console.log('keys array after pressed = ' + keys);
    });
    // listen for which key is unpressed
    document.addEventListener('keyup', (event) => {
        // the key to remove
        var removeKey = event.keyCode;
      // remove it
        keys = $.grep(keys, function(value) {
            return value != removeKey;
        });
        console.log('keys array after unpress = ' + keys);
    });
    // assign key number to a recognizable value name
    var w = 87;
    var d = 68;
    var s = 83;
    var a = 65;
    // determine which keys are pressed
    document.addEventListener('keydown', (event) => {
      if ($.inArray(w, keys) != -1 && $.inArray(d, keys) != -1) { // w + d
        console.log('function for w + d combo');
      } else if ($.inArray(s, keys) != -1 && $.inArray(a, keys) != -1) { // s + a
        console.log('function for s + a combo');
      }
    })
    

    바이올린 데모

    https://jsfiddle.net/Hastig/us00zdo6/


  6. 6.내 요점은 (아무도 :( 그것을 사용하지 않았다) 만료로 나는 더 많은 2017 솔루션 답을 업데이트하기로 결정했습니다. 아래 확인하십시오.

    내 요점은 (아무도 :( 그것을 사용하지 않았다) 만료로 나는 더 많은 2017 솔루션 답을 업데이트하기로 결정했습니다. 아래 확인하십시오.

    JQuery와 바로 가기를 감지하는 내 플러그인을 사용할 수 있습니다.

    그것은 기본적으로 캐시의 이벤트는 키가 순간에 누를 것을 얻을. 모든 키를 누르면 경우는 기능을 발생합니다.

    https://github.com/maciekpaprocki/bindShortcut (만료!)

    당신은 어떻게 추가 정보 파일에서 사용하는 작은 설명이있다. 도움이 되었기를 바랍니다. 피드백 이상의 감사합니다.

    [편집] 2017 :

    그것은 2017 년이고 우리는 같은 물건을 해결하기 위해 jQuery를 플러그인이 필요하지 않습니다. 즉 당신이 뭔가를해야합니다 :

    let pressed = {};
    
    document.addEventListener('keydown', (event) => {
       pressed[event.key] = true;
    });
    document.addEventListener('keyup', (event) => {
       delete pressed[event.key];
    });
    
    //and now write your code
    document.addEventListener('keydown', (event) => {
      if(pressed[firstKey]&&pressed[secondKey]){
        //dosomething
      }
    });
    

    이전 브라우저는 IE9의 모든 (슈퍼 오래된 우분투 등) 권리 행사의 위임을 지원하지 않는 OS에서의 한계 금액을 제외하고 잘 작동합니다 그러나에서 약간의 단점이있을 수 있습니다. 그들에 그 브라우저의 문제가 아니라 같은 것을 해결할 수있는 방법은 없습니다.

    예를 들어 뚜껑 잠금에 대해 같은 부울 키에 연결된 새로운 맥 몇 가지 단점이 있습니다.

    더 읽기 : https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names_and_Char_values


  7. 7.@ 데이비드 탕의 솔루션에 따르면, 여기 Ctrl + A 조합 + Shift 키를 캡처에 대한 신속하고 더러운 사용자 정의는 다음과 같습니다

    @ 데이비드 탕의 솔루션에 따르면, 여기 Ctrl + A 조합 + Shift 키를 캡처에 대한 신속하고 더러운 사용자 정의는 다음과 같습니다

    var pressedKeys = {};
    
    function checkPressedKeys() {
        var shiftPressed=false, ctrlPressed=false, aPressed=false;
        for (var i in pressedKeys) {
            if (!pressedKeys.hasOwnProperty(i)) continue;
            if(i==16){
                shiftPressed=true;
            }
            else if(i==17){
                ctrlPressed=true;
            }
            else if(i==65){
                aPressed=true;
            }
        }
        if(shiftPressed && ctrlPressed && aPressed){
            //do whatever you want here.
        }
    }
    
    
    $(document).ready(function(){
        $(document).keydown(function (e) {
            pressedKeys[e.which] = true;
            checkPressedKeys();
        });
    
        $(document).keyup(function (e) {
            delete pressedKeys[e.which];
        });
    });
    

  8. 8.당신이 esma6를 사용하는 경우, 다음과 같은 사용하여 설정을 할 수 있습니다.

    당신이 esma6를 사용하는 경우, 다음과 같은 사용하여 설정을 할 수 있습니다.

    const KEYS = new Set();
    
    $(document).keydown(function (e) {
       KEYS.add(e.which);
       if(KEYS.has(12) && KEYS.has(31)){
          //do something
       }
    });
    $(document).keyup(function (e) {
       KEYS.delete(e.which);
    });
    

    당신이 그들을 함께 눌러 사용자가 원하는 경우, 당신은 할 수 있습니다 :

    const KEYS = new Set(); // for other purposes
    const RECENT_KEYS = new Set(); // the recently pressed keys
    const KEY_TIMELAPSE = 100 // the miliseconds of difference between keys
    
    $(document).keydown(function (e) {
       KEYS.add(e.which);
       RECENT_KEYS.add(e.which);
       setTimeout(()=>{
          RECENT_KEYS.delete(e.which);
       }, KEY_TIMELAPSE);
       if(RECENT_KEYS.has(37) && RECENT_KEYS.has(38)){
          // Do something
       }
    });
    $(document).keyup(function (e) {
       KEYS.delete(e.which);
       RECENT_KEYS.delete(e.which);
    });
    

    여기 codepen https://codepen.io/Programador-Anonimo/pen/NoEeKM?editors=0010입니다

  9. from https://stackoverflow.com/questions/4954403/can-jquery-keypress-detect-more-than-one-key-at-the-same-time by cc-by-sa and MIT license