核心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