javascript - 太多的 if-else 语句。它们可以全局化吗?

标签 javascript jquery if-statement global-variables

我正在尝试简化此脚本。我有 50 个这样的 if e.keyCode 语句,所以双重嵌套 if/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;
        }        
    }
}

最佳答案

有 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];
}

关于javascript - 太多的 if-else 语句。它们可以全局化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9233400/

相关文章:

excel - IF ELSE 与 Select Case

java - 嵌入式 if 语句的替代方案?

java - 了解色度键

javascript - 在运行被调用的函数之前触发一个函数运行

jquery - 如何让两个垂直 div 一个挨着一个,右边的 div 根据另一个的高度溢出?

javascript - 通过 jQuery 获取 html 表单

php - 单击时使文本段落成为可编辑的文本区域

javascript - 无法显示选项、单选和数值输入组合的结果

javascript - 如何让 C++ 参数决定网页的 HTML 外观?

Javascript 使用 setTimeouts 闪烁