Question

Je tente d'écraser un événement jQuery de base, dans ce cas, l'événement keydown. Mon intention est de fonctionnalité preventDefault() de Left(37), Up(38), Right(39) et Down(40) pour maintenir la cohérence des touches de raccourci dans mon application web.

J'utilise la solution fournie ici le problème charCode preventDefault conditionnel.

Pour une raison quelconque, ma Ecraser fonction est tout simplement pas tirer, et je ne peux pas mettre mon doigt sur le problème. Je crains qu'au cours des 30 dernières minutes de cette question a donné lieu à une perte de cheveux. Quelqu'un at-il le remède?

/* 
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 );
    }
})();
Était-ce utile?

La solution

Un problème avec votre solution est que keydown n'accepte pas un événement comme argument pour vous modèle mental de ce qui se passe est incorrect. Comment l'événement est créé est probablement compliqué, alors pourquoi ne pas simplement écrire un plugin qui utilise keydown et construit sur elle, rainurage votre logique avant un rappel donné:

(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 cette façon, la version originale (intacte) est toujours disponible pour vous, peut donc utiliser également les deux méthodes:

$('selector').keydown(function(e) {});
$('selector').limitedkeydown(function(e) {});
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top