コアJQueryイベントの変更の問題
-
15-10-2019 - |
質問
この場合、コアJQueryイベントを上書きしようとしています。 keydown
イベント。私の意図はそうです preventDefault()
の機能 Left(37)
, Up(38)
, Right(39)
と Down(40)
私のWebアプリケーションでホットキーの一貫性を維持するため。
提供されたソリューションを使用しています ここ 条件付きcharcodeの場合、防止の問題の問題。
何らかの理由で、私の関数の上書きは単に発射されておらず、問題に指を置くことはできません。過去30分間で、この問題が脱毛をもたらしたのではないかと心配しています。誰かが治療法を持っていますか?
/*
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 );
}
})();
解決
解決策の問題はそれです keydown
それが議論としてイベントを受け入れないので、何が起こっているのかというメンタルモデルは間違っています。イベントがどのように作成されるかはおそらく複雑なので、使用するプラグインを書くだけではなぜ keydown
そして、それに基づいて、特定のコールバックの前にロジックをスロットインします。
(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);
そうすれば、オリジナルの(手つかずの)バージョンがまだ利用可能であるため、両方の方法を等しく使用できます。
$('selector').keydown(function(e) {});
$('selector').limitedkeydown(function(e) {});
所属していません StackOverflow