Wie kann ich einer vorhandenen JavaScript-Funktion eine Tastenkombination hinzufügen?

Lesezeit: 5 Minuten

Benutzer-Avatar
Chris

Hier ist mein Code:

function pauseSound() {
    var pauseSound = document.getElementById("backgroundMusic");
    pauseSound.pause(); 
}

Ich möchte diesem Code gerne eine Tastenkombination hinzufügen, wie kann ich dies tun, damit die Funktion auch ausgeführt werden kann, wenn auf eine Schaltfläche geklickt wird?

Versucht, eine andere if-Anweisung hinzuzufügen, aber es funktioniert nicht, irgendwelche Ideen?

function doc_keyUp(e) {
    if (e.ctrlKey && e.keyCode == 88) {
        pauseSound();
    }

    else if (e.ctrlKey && e.keyCode == 84) {
        playSound();
    }
}

  • Die tatsächliche Syntax für ein Else-if wäre else if () { }. entfernen Sie den Bindestrich.

    – Link

    25. März 2010 um 4:00 Uhr

  • Tut mir leid, dass ich eine schlechte Bearbeitung eingereicht habe

    – Tiago Rangel de Sousa

    5. Juni um 10:56

Benutzer-Avatar
lincolnk

Ein Event-Handler für das keyup-Event des Dokuments scheint eine geeignete Lösung zu sein.

Notiz: KeyboardEvent.keyCode wurde zugunsten von verworfen key.

// define a handler
function doc_keyUp(e) {

    // this would test for whichever key is 40 (down arrow) and the ctrl key at the same time
    if (e.ctrlKey && e.key === 'ArrowDown') {
        // call your function to do the thing
        pauseSound();
    }
}
// register the handler 
document.addEventListener('keyup', doc_keyUp, false);

  • Das funktioniert sehr gut, danke. Wie könnte ich diesen Code zweimal verwenden, weil ich eine andere Tastenkombination für 'playSound()' benötige?

    – Chris

    24. März 2010 um 21:38 Uhr

  • Fügen Sie eine Else-if-Anweisung ähnlich der ersten if-Anweisung hinzu, aber ändern Sie den Schlüsselcode nach Bedarf. Machen Sie von dort aus Ihren Aufruf playSound(). Wenn Sie dieselbe Taste für beide Aktivitäten verwenden möchten, müssen Sie eine Flag-Variable einrichten und sie jedes Mal überprüfen/setzen, wenn die Taste gedrückt wird, um zu bestimmen, welche Aktion ausgeführt werden soll.

    – Link

    24. März 2010 um 22:01 Uhr

  • Und was ist mit den Browsern, die das nicht unterstützen? addEventListener?

    - James

    24. März 2010 um 22:34 Uhr

  • IE ist der einzige, mit dem ich gearbeitet habe, und Sie würden document.attachEvent('onkeyup', doc_keyUp) verwenden; Es sollte viele Hinweise darauf geben, ob eine Funktion vor dem Aufrufen vorhanden ist.

    – Link

    24. März 2010 um 23:02 Uhr

  • Ich habe versucht, ein else-if hinzuzufügen, aber es funktioniert nicht, siehe den Themenbeitrag, um den aktualisierten Code zu sehen.

    – Chris

    25. März 2010 um 0:15 Uhr

Benutzer-Avatar
Herr mii

Wenn Sie nach dem Drücken einer Taste ein Ereignis auslösen möchten, versuchen Sie Folgendes:

Drücken Sie in diesem Beispiel ALT+a:

document.onkeyup = function () {
  var e = e || window.event; // for IE to cover IEs window event-object
  if(e.altKey && e.which == 65) {
    alert('Keyboard shortcut working!');
    return false;
  }
}

Hier ist eine Geige: https://jsfiddle.net/dmtf6n27/38/

Bitte beachten Sie auch, dass die Keycode-Nummern unterschiedlich sind, unabhängig davon, ob Sie verwenden onkeypress oder onkeyup. „KeyboardEvent keyCode“-Eigenschaft der W3-Schulen hat mehr Informationen.

  • Du hast "functione" statt "function" geschrieben

    – Tiago Rangel de Sousa

    31. Mai um 19:11 Uhr

  • Und Sie müssen das () nach "Funktion" schreiben

    – Tiago Rangel de Sousa

    31. Mai um 19:11 Uhr

Benutzer-Avatar
Sikha

//For single key: Short cut key for 'Z'
document.onkeypress = function (e) {
    var evt = window.event || e;
    switch (evt.keyCode) {
        case 90:  
            // Call your method Here
            break;
    }
}

//For combine keys like Alt+P
document.onkeyup = function (e) {
    var evt = window.event || e;   
        if (evt.keyCode == 80 && evt.altKey) {
            // Call Your method here   
        }
    }
}
    //ensure if short cut keys are case sensitive.
    //    If its not case sensitive then
    //check with the evt.keyCode values for both upper case and lower case. ......

Benutzer-Avatar
Neil

Hier ist meine Lösung:

HTMLElement.prototype.onshortcut = function(shortcut, handler) {
    var currentKeys = []
    
    function reset() {
        currentKeys = []
    }

    function shortcutMatches() {
        currentKeys.sort()
        shortcut.sort()

        return (
            JSON.stringify(currentKeys) ==
            JSON.stringify(shortcut)
        )
    }

    this.onkeydown = function(ev) {
        currentKeys.push(ev.key)

        if (shortcutMatches()) {
            ev.preventDefault()
            reset()
            handler(this)
        }

    }

    this.onkeyup = reset
}


document.body.onshortcut(["Control", "Shift", "P"], el => {
    alert("Hello!")
})
  • Wenn Sie meine Funktion aufrufen, wird ein Array mit dem Namen erstellt currentKeys; Dies sind die Tasten, die in diesem Moment gedrückt werden.
  • Jedes Mal, wenn eine Taste gedrückt wird, aufgrund von gefühlt onkeydownes wird hinzugefügt currentKeys Reihe.
  • Wenn die Tasten losgelassen werden, wird aufgrund von gefühlt onkeyupwird das Array zurückgesetzt, was bedeutet, dass in diesem Moment keine Tasten gedrückt werden.
  • Jedes Mal wird überprüft, ob die Verknüpfung übereinstimmt. Wenn dies der Fall ist, wird der Handler angerufen.

Das hat bei mir funktioniert

document.onkeyup=function(e){
  var e = e || window.event;
  if(e.which == 37) {
    $("#prev").click()
  }else if(e.which == 39){
    $("#next").click()
  }
}

  • Ich habe versucht, mit onkeyup aber es lief 18 Mal bei einem Druck. Verwenden onkeydown Stattdessen lief es nur einmal.

    – cmcodes

    27. August 2021 um 7:12 Uhr

Benutzer-Avatar
xav

Fangen Sie den Schlüsselcode ab und rufen Sie dann Ihre Funktion auf. Dieses Beispiel fängt die ESC Taste und ruft Ihre Funktion auf:

function getKey(key) {
    if ( key == null ) {
        keycode = event.keyCode;
    // To Mozilla
    } else {
        keycode = key.keyCode;
    }
    // Return the key in lower case form    
    if (keycode ==27){
        //alert(keycode);
        pauseSound();
        return false;
    }
    //return String.fromCharCode(keycode).toLowerCase();
}
$(document).ready( function (){
    $(document).keydown(function (eventObj){
        //alert("Keydown: The key is: "+getKey(eventObj));
        getKey(eventObj);
    });
});

Du brauchst JQUERY für dieses Beispiel.

  • Ich habe versucht, mit onkeyup aber es lief 18 Mal bei einem Druck. Verwenden onkeydown Stattdessen lief es nur einmal.

    – cmcodes

    27. August 2021 um 7:12 Uhr

Benutzer-Avatar
der Blechmann

Diese scheinen alle die veralteten zu verwenden keyCode und which Eigenschaften. Hier ist eine nicht veraltete Version, die jQuery verwendet, um das Ereignis zu verbinden:

$("body").on("keyup", function (e) {
    if(e.ctrlKey && e.key == 'x')
        pauseSound();
    else if(e.ctrlKey && e.key == 't')
        playSound();
})

Notiz: Strg+t kann bereits dem Öffnen eines neuen Browser-Tabs zugewiesen sein.

  • .key ist die nicht veraltete Eigenschaft?

    – sam boosalis

    16. Mai 2019 um 4:28 Uhr

  • Es sieht aus wie key ist die empfohlene Eigenschaft, obwohl sie in Safari nicht unterstützt wird: w3schools.com/jsref/event_key_key.asp

    - Blaue Himbeere

    9. März 2020 um 18:28 Uhr

1018170cookie-checkWie kann ich einer vorhandenen JavaScript-Funktion eine Tastenkombination hinzufügen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy