Jquery keypress except: {something}
Jquery keypress except: {something}
jQuery或Javascript中是否有任何快捷方式(实际上是一个函数)来处理按钮按下,除了某些东西,或者只有某些东西,例如:
$(input).keypress('nonfunctional' function(){
// do something
});
这将仅在按下 [a-z][0-9] 按钮时触发,忽略单个shift
或ctrl
但处理shift+a
=> 按下 A?
附言我确实知道if(key.code == 123)
然后...
不,如果你想排除特定的键,那就是event.keyCode/event.哪些属性。
或者你可以扩展jquery按键。我猜是这样的:
$.fn.keypressBut = function(codes, callback) {
$(this).keypress(function(e) {
~$.inArray(e.keyCode, codes) || callback.call(this, e);
});
}
// Lets ignore Enter and Space
$('input').keypressBut([13, 32], function(e) {
alert(e.keyCode);
})
你可以
做类似的事情
使用一个函数扩展 jquerys
fn
属性,该函数采用参数,例如- 一些数据
- 回调函数
编写一个验证函数
- 将键代码转换为字符串
- 将其与正则表达式匹配。
- 如果按下了 shift 键
- 将其转换为大写
- 检查是否满足其他条件,例如按下 Ctrl/Alt 键。
- 返回结果。
- 如果验证成功
- 执行回调函数
在代码站点上,这可能喜欢
$.fn.selectedKey = function (cb, data) {
def.call(data, {
ctrlKey: 2, //0: musn't be pressed, 1: must be pressed, 2: both.
altKey: 2, // "
invert: 0, //inverts the filter
filter: /.*/, // A Regular Expression, or a String with a Regular Expression
preventDefault: false //Set to true to prevent Default.
}); //Sets the default Data for the values used,
function validate(e) {
var key = e.char = String.fromCharCode(e.keyCode || e.which); // Converts the pressed key to a String
if (e.shiftKey) key = key.toUpperCase(); //Handles Case Sensitivity.
var exp = new RegExp(e.data.filter.replace(/''''('d)/g, String.fromCharCode("$1"))); //Creates a new RegExp from a String to e.g. allow "'2" to match the keyCode 2
var c = !! (e.data.ctrlKey ^ e.ctrlKey ^ 1 > 0); //c == true if the above stated conditions are met e.g Ctrl Key Pressed and `ctrlKey == 1` -> true
var a = !! (e.data.altKey ^ e.altKey ^ 1 > 0); //e.g Alt Key Pressed and `altKey == 0` -> false
return (exp.test(key) && (c && a)); //Returns the validation Result
}
function def(obj) { //a minimal helper for default values
for (var prop in obj) {
this[prop] = this[prop] || obj[prop];
}
}
this.keypress(data, function (e) {
if (e.data.preventDefault) e.preventDefault();
if (validate(e) != e.data.invert) cb(e); //Calls the callback function if the conditions are met
});
};
然后,您可以通过以下方式使用
使用正则表达式
$("body").selectedKey(function (e) {
console.log("All lower characters Numbers and 'A': " + e.char);
}, {
filter: /[a-z]|[0-9]|A/,
ctrlKey: 2,
altKey: 2
});
如果按下了任何 [a-z] 或 [0-9] 或 Shift 键 + A,则无论 ctrl 和 alt 的状态如何,都会触发此操作
或键码
$("body").selectedKey(function (e) {
// do somet
console.log("KeyCode 2 " + e.char);
}, {
filter: "''2", //Ctrl + b
ctrlKey: 1,
altKey: 2
});
如果按 ctrl +b 将触发
您也可以将两者结合起来。
这里有一个关于JSBin的例子,可以摆弄一下。
如果你
不想写一个大的 if 语句来检测按下的键代码,有一个 jQuery 插件可以使用类和正则表达式来过滤按键,它被称为 keyfilter。一个例子是
$(selector).keyfilter(/[a-z]/);
例如,
下面的这个函数只允许数字 en 使用keydown事件处理这个函数。
function OnlyNumbers(event) {
if (event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 27 || event.keyCode == 13 || (event.keyCode == 65 && event.ctrlKey === true) || (event.keyCode >= 35 && event.keyCode <= 39)) { return; }
else { if (event.shiftKey || (event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105)) { event.preventDefault(); } }
}
你试过event.altKey/event.shiftKey/event.ctrlKey吗?
相关文章:
- 这.SOMETHING 总是返回未定义的 - extjs
- KeyPress和Keydown在这个特定的代码上不起作用.只有key-up起作用
- 如何在JavaScript中创建类似于something.function()的函数
- localStorage["something"] vs localStorage.somethin
- 我的localStorage结果显示了[null,null,“something”]],而不是“”;什么”;
- keypress事件无法使用addEventListener函数
- Javascript:如何称呼这个.Something() from this.img.onload = SomeLoa
- 什么是JS的确切等价物:PHP中的something.toFixed()
- javascript中的$(“something”)是什么意思
- 正则表达式将document.all.something替换为document.getElementById(“some
- 将sum(something)的出现次数更改为something_sum
- 使index.html的默认状态不带#something
- KeyPress图像应进行缩放
- 为什么要将Something分配给Something.prototype.constructor
- React props={this.refs.something} undefined
- clearInterval - something's amiss
- jQuery('#class').keypress Event.keyCode == 13) Not w
- EmberJS中的全局keyDown/keyPress事件,而无需设置焦点
- 对于jqGrid:在keypress事件中调用$(document).on('click'.)无法正常工
- Jquery keypress except: {something}