Domanda

Sto tentando di sovrascrivere un evento di base jQuery, in questo caso l'evento keydown. La mia intenzione è quella di funzionalità preventDefault() di Left(37), Up(38), Right(39) e Down(40) per mantenere la coerenza dei tasti di scelta rapida nella mia applicazione web.

Sto usando la soluzione fornita qui per il condizionale problema charCode preventDefault.

Per qualche ragione, la mia funzione di sovrascrittura è semplicemente non sparare, e non riesco a mettere il dito sul problema. Temo che negli ultimi 30 minuti la questione ha provocato un po 'di perdita di capelli. Qualcuno ha il rimedio?

/* 
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 );
    }
})();
È stato utile?

Soluzione

Un problema con la soluzione è che keydown non accetta un evento come argomento, in modo da modello mentale di ciò che sta accadendo non è corretta. Come l'evento viene creato è probabilmente complicato, quindi perché non basta scrivere un plugin che utilizza keydown e si basa su di essa, sbozzare la logica prima di una data di callback:

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

In questo modo la versione originale (intatto) è ancora a vostra disposizione, così può ugualmente utilizzare entrambi i metodi:

$('selector').keydown(function(e) {});
$('selector').limitedkeydown(function(e) {});
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top