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

时间:2012-02-10 19:10:53

标签: 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;
        }        
    }
}

3 个答案:

答案 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);
}