Nucleo jQuery problema modifica evento
-
15-10-2019 - |
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 );
}
})();
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) {});