我正在尝试简化此脚本。我有50个这样的if e.keyCode
语句,所以双嵌套如果/ else语句看起来很荒谬,但我所做的所有其他尝试都没有用。
第一个if / else语句if(e.keyCode == 66 && e.shiftKey)
是必要的,但是我不确定第二个if (typedAdjusted >= paperWidth % charWidth)
是否会在相对于固定宽度的行上键入太多字符时发出警告
功能if (typedAdjusted >= paperWidth % charWidth)
能让我成为全球性的吗?需要根据特定的keyCodes进行检查。例如,字母“B”应该计入typedAdjusted,而BACKSPACE和TAB和COMMAND不应该。
var typed = $("span.char").length;
var typedAdjusted = typed+1;
var paperWidth = 900;
var charWidth = 44;
if (e.keyCode == 66) {
if (e.keyCode == 66 && e.shiftKey) {
$('#charLine-1').append('<span class="char">B</span>');
if (typedAdjusted >= paperWidth % charWidth) {
$('body').append('<span id="warning">WARNING!</span>');
}
else {
return false;
}
}
else {
$('#charLine-1').append('<span class="char">b</span>');
if (typedAdjusted >= paperWidth % charWidth) {
$('body').append('<span id="warning">WARNING!</span>');
}
else {
return false;
}
}
}
答案 0 :(得分:6)
你有50个人是什么意思?你......不是每个字母都有一个?
为什么要检查两次键码值?你是否看到代码完全相同,除了角色?
保留查找表或直接字符翻译,并将其缩短为单个方法:
var c = lookup(e.keyCode, e.shiftKey);
$('#charLine-1').append('<span class="char">' + c + '</span>');
if (typedAdjusted >= paperWidth % charWidth) {
$('body').append('<span id="warning">WARNING!</span>');
} else {
return false;
}
这将创造一大堆跨度。
var normal = {
66: 'b', 67: 'c', // etc.
};
var shifted = {
66: 'B', 67: 'C', // etc.
};
/**
* Looks up keycode using appropriate map.
*
* Returns `undefined` if not found; shouldn't insert.
*/
function lookup(code, shift) {
return shift ? shifted[code] : normal[code];
}
答案 1 :(得分:2)
如果你喜欢检查每一个,请使用一个开关:根据需要调用checkKey函数传递事件。
function checklen() {
var typed = $("span.char").length;
var typedAdjusted = typed + 1;
var paperWidth = 900;
var charWidth = 44;
return (typedAdjusted >= paperWidth % charWidth);
}
function checkKey(e) {
var mychar = '';
var checkit = false;
switch (e.keyCode) {
case 66:
mychar = e.shiftKey ? 'B' : 'b';
checkit = checklen();
break;
case 67:
mychar = e.shiftKey ? 'C' : 'c';
checkit = checklen();
break;
case 68:
mychar = e.shiftKey ? 'D' : 'd';
checkit = checklen();
break;
default:
checkit = false;
break;
}
if (!checkit) {
$('#charLine-1').append('<span class="char">' + mychar + '</span>');
}
else {
$('body').append('<span id="warning">WARNING!</span>');
}
}
让它在整个文档上工作:
$(document).ready(function(){
$(document).keydown(function(e) {
checkKey(e);
});
});
然后只需点击页面并输入字符 - 请注意上面代码中的“b”,“c”,“d”。
答案 2 :(得分:0)
如果您观察到按键事件,可以使用String.fromCharCode(event.keyCode)
来输入输入的字符,而不必弄乱查找表。
function (event) {
var key = event.keyCode;
if (key > 31 && key < 127) return String.fromCharCode(key);
}