2016-06-06 14 views
2

ich ein userscript mit dem folgenden Code schreibe:Javascript: keydown Ereignis Brennen nicht

(function() { 
    'use strict'; 
    window.addEventListener("keydown", arrows, false); 
    function arrows(e) { 
     debugger; 
     switch(e.keycode) { 
      case 37: alert("Left"); break; 
      case 39: alert("Right"); break; 
     } 
    } 
})(); 

Schließlich die linke und rechte Fälle auf die vorherigen und nächsten Artikel in einer Reihe navigieren jeweils mit so etwas wie:

window.location = String(parseInt(window.location.href.match(/\d+$/))-1); 

Durch Drücken der Pfeiltasten wird jedoch keine Warnung ausgegeben. Das Skript ist klar geladen, das Chrome-Entwickler-Menü zeigt an, dass die arrows()-Funktion als Ereignis-Listener für window.keydown registriert ist und die Funktion dennoch nicht ausgelöst wird. Ich fügte debugger; zur arrows() Funktion hinzu, aber der Debugger zeigt nicht an, wenn ich die Pfeiltasten drücke.

+0

Gibt es ein Event-Handler weiter unten im Baum zu stoppen Ausbreitung des ' keydown'-Ereignis (in diesem Fall sollten Sie den dritten Parameter von 'addEventListener' auf' true' setzen, um das Capturen zu ermöglichen)? –

Antwort

1

Sie die keyCode mispelled haben:

switch(e.keyCode) { // Code is uppercase 
    case 37: alert("Left"); break; 
    case 39: alert("Right"); break; 
} 
+0

Das würde die Debugger-Anweisung jedoch nicht davon abhalten, zu feuern. –

+0

@ StuartP.Bentley nicht wahr? –

+0

@ RokoC.Buljan Siehe Zeile 5 des Codes im OP. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/debugger –

1

Die event propagation wahrscheinlich für ein Element an einem bestimmten Punkt auf dem Handler gestoppt zu werden, bevor es aufgrund von Blasen bis zu window (wahrscheinlich ein schlecht geschrieben onkeydownfalse Rückkehr um die Standardaktion zu verhindern, ohne darauf zu achten, dass dies auch die Verbreitung stoppt).

Sie sollten Ihre Zuhörer anhängen mit erfassen, so dass er das Ereignis bei window erfassen wird, vor es sprudelt:

// note the third parameter 
window.addEventListener("keydown", arrows, true);