Frage

Ich versuche, ein Core JQuery -Event zu überschreiben, in diesem Fall die keydown Veranstaltung. Meine Absicht ist zu preventDefault() Funktionalität von Left(37), Up(38), Right(39) und Down(40) Um die Konsistenz von Heißschlüssel in meiner Webanwendung zu erhalten.

Ich benutze die bereitgestellte Lösung hier Für das bedingte Charcode PREIVORDEFAULT -Problem.

Aus irgendeinem Grund schießt mein Funktion überschreiben einfach nicht und ich kann das Problem nicht mit dem Finger einsetzen. Ich befürchte, dass dieses Problem in den letzten 30 Minuten zu einem gewissen Haarausfall geführt hat. Hat jemand das Mittel?

/* 
Modify Keydown Event to prevent default PageDown and PageUp functionality
*/
(function(){
    var charCodes = new Array(37,38,39,40);
    var original = jQuery.fn.keydown;

    jQuery.fn.keydown = function(e){
        var key=e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;
        alert('now why is my keydown mod not firing?');
        if($.inArray(key,charCodes))
        {
          alert('is one of them, do not scroll page');
          e.preventDefault();
          return false;
        }
        original.apply( this, arguments );
    }
})();
War es hilfreich?

Lösung

Ein Problem mit Ihrer Lösung ist das keydown Akzeptiert kein Ereignis als Argument, sodass Ihr mentales Modell dessen, was vor sich geht, falsch ist. Wie das Ereignis erstellt wird, ist wahrscheinlich kompliziert. Warum also nicht einfach ein Plugin schreiben, das verwendet keydown und baut darauf auf und setzt Ihre Logik vor einem bestimmten Rückruf ein:

(function($){
    var charCodes = new Array(37,38,39,40);

    $.fn.limitedkeydown = function(callback) {
        this.keydown(function(e) {
            if ($.inArray(e.keyCode, charCodes))
                e.preventDefault();
            callback(e);
        });
    };
})(jQuery);

Auf diese Weise steht Ihnen die ursprüngliche (unberührte) Version weiterhin zur Verfügung, sodass Sie beide Methoden gleichermaßen verwenden können:

$('selector').keydown(function(e) {});
$('selector').limitedkeydown(function(e) {});
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top