if-else语句太多了.他们可以成为全球性的吗?

par*_*don 3 javascript jquery if-statement global-variables

我正在尝试简化此脚本.我有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;
        }        
    }
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*ton 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;
}
Run Code Online (Sandbox Code Playgroud)

这将创造一大堆跨度.


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];
}
Run Code Online (Sandbox Code Playgroud)