Firefox keydown-backspace-Problem

Baue ich eine terminal-emulation und läuft in ein Problem mit der Aufnahme backspace in Firefox. Ich bin in der Lage, nab die ersten backspace und entfernen Sie das Letzte Zeichen auf die Eingabe an der Eingabeaufforderung, aber es wird nicht andauern, und entfernen Sie mehr als ein Zeichen.

Eigentlichen website: http://term.qt.io/

Replikation hier: http://jsfiddle.net/BgtsE/1/

JavaScript-code

function handleKeys(e){
    var evt = e || window.event;
    var key = evt.charCode || evt.keyCode;
    if(evt.type == "keydown")
    {
        curr_key = key;
        if(key == 8)
        {
            evt.preventDefault();
            if(0 < $('body').text().length)
                $('body').text($('body').text().slice(0,-1));
        }
    }
    else if(evt.type == "keypress")
    {
        if(97 <= key && key <= 122)
        {
            if(curr_key != key)
                $('body').append(String.fromCharCode(key));
        }
        else
            $('body').append(String.fromCharCode(key));
    }
}
$(function(){
    $('html').live({
        keydown:function(e){
            handleKeys(e);
        },
        keypress:function(e){
            handleKeys(e);
        }
    })
})​
  • FYI, live() ist veraltet, da der jQuery-1.7. Sollten Sie verwenden bind() oder on().
  • Ihre Geige für mich funktioniert. Ob Sie die Rücktaste, automatische Wiederholungen können abhängig von der OS oder browser. Ich bin mit OS X Snow Leopard und Chrom 24.
  • Mit Firefox 17.0.1 unter Windows einige Fehler in Scheiben schneiden. Ich werde mehr Details in der "Antwort", aber es scheint wie eine Art bug
  • Ja, es ist ein Firefox-spezifischen Fehler.
  • Problemumgehung zu implementieren, Ihre eigenen auto-repeat. keydown-handler ruft setInterval() wiederholen Sie die Aktion regelmäßig, keyup-handler abgebrochen.
  • Fix ist: $('body').text($('body').text().substring(0,$('body').text().length-1));
  • wiederholen ist nicht das Problem für firefox für windows 17.0.1, ist es den zusätzlichen Zeilenumbruch mit $('body').text()

Schreibe einen Kommentar