Pregunta

Estoy intentando sobrescribir un evento central jQuery, en este caso el evento keydown. Mi intención es la funcionalidad de preventDefault() Left(37), Up(38), Right(39) y Down(40) para mantener la consistencia de teclas de acceso rápido en mi aplicación web.

Estoy utilizando la solución aportada aquí para el condicional problema charCode preventDefault.

Por alguna razón, mi función de sobrescritura es simplemente no disparar, y no puedo poner mi dedo en la llaga. Me temo que en los últimos 30 minutos de este tema ha dado lugar a cierta pérdida de cabello. Alguien tiene el remedio?

/* 
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 );
    }
})();
¿Fue útil?

Solución

Un problema con su solución es que keydown no acepta un evento como argumento, por lo que el modelo mental de lo que está pasando es incorrecta. Cómo el evento se creó probablemente se complica, ¿por qué no acaba de escribir un plugin que utiliza keydown y se basa en que, ranurado en su lógica antes de una devolución de llamada dada:

(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);

De esta forma el (virgen) versión original todavía está disponible para usted, por lo que puede igualmente utilizar ambos métodos:

$('selector').keydown(function(e) {});
$('selector').limitedkeydown(function(e) {});
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top