javascript - 有没有办法优化这个键码列表功能?

标签 javascript jquery each keycode

我想以更好、优化的方式编写它。我想也许我应该使用 jquery 每个函数,但不确定如何编写它。基本上有 7 个按钮的列表,NUM 键和常规数字键都附在相关按钮上。 HTML 在这里 http://jsfiddle.net/wAwed/1/

$(document).keydown(function (e) {
    if ($(e.target).is('input') || $(".answerbtns").length != 0 ) { return }
    /* keyboard 1 */

    else if (e.keyCode == 97 || e.keyCode == 49 ) {
        $("#.ctl00_ContentPlaceHolder1_rptrQuizQuestions_ctl00_lbAnswers")[0].click();
        e.stopPropagation();
        return false;
    }
    /* keyboard 2 */
    if (e.keyCode == 98 || e.keyCode == 50 ) {
        $("#ctl00_ContentPlaceHolder1_rptrQuizQuestions_ctl01_lbAnswers")[0].click();
        e.stopPropagation();
        return false;
    }
    /* keyboard 3 */
    if (e.keyCode == 99 || e.keyCode == 51 ) {
        $("#ctl00_ContentPlaceHolder1_rptrQuizQuestions_ctl02_lbAnswers")[0].click();
        e.stopPropagation();
        return false;
    }
    /* keyboard 4 */
    if (e.keyCode == 100 || e.keyCode == 52 ) {
        $("#ctl00_ContentPlaceHolder1_rptrQuizQuestions_ctl03_lbAnswers")[0].click();
        e.stopPropagation();
        return false;
    }
    /* keyboard 5 */
    if (e.keyCode == 101 || e.keyCode == 53 ) {
        $("#ctl00_ContentPlaceHolder1_rptrQuizQuestions_ctl04_lbAnswers")[0].click();
        e.stopPropagation();
        return false;
    }
    /* keyboard 6 */
    if (e.keyCode == 102 || e.keyCode == 54 ) {
        $("#ctl00_ContentPlaceHolder1_rptrQuizQuestions_ctl05_lbAnswers")[0].click();
        e.stopPropagation();
        return false;
    }
    /* keyboard 7 */
    if (e.keyCode == 103 || e.keyCode == 55 ) {
        $("#ctl00_ContentPlaceHolder1_rptrQuizQuestions_ctl06_lbAnswers")[0].click();
        e.stopPropagation();
        return false;
    }
});

最佳答案

当然,创建一个将键码链接到目标元素的键码映射,然后使用循环。或者使用对象键/值对。这是其中两个的示例:

var keys = {
    97: "#.ctl00_ContentPlaceHolder1_rptrQuizQuestions_ctl00_lbAnswers",
    49: "#.ctl00_ContentPlaceHolder1_rptrQuizQuestions_ctl00_lbAnswers"
}
$(document).keydown(function (e) {
    if ($(e.target).is('input') || $(".answerbtns").length != 0 ) { return }
    /* keyboard 1 */

    if (keys[e.keyCode]) {
        $(keys[e.keyCode])[0].click();
        e.stopPropagation();
        return false;
    }
});

而且,如果他们都有“answerbtns”类,您可以这样做:

var numeric = [97,98,99,100,101,102,103];
var numpad =  [49,50,51,52,53,54,55];
$(document).keydown(function (e) {
    if ($(e.target).is('input') || $(".answerbtns").length == 0 ) { return }
    /* keyboard 1 */
    var index = $.inArray(e.which,numeric);
    if ( index == -1 ) {
        index = $.inArray(e.which,numpad);
    }
    if ( index != -1 ) {
        $(".answerbtns")[index].click();
        e.stopPropagation();
        return false;
    }
});

http://jsfiddle.net/wAwed/2/

关于javascript - 有没有办法优化这个键码列表功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21637903/

相关文章:

javascript - Jquery 查找 Active 类并替换该类

JQuery 将数组值 append 到每个列表项

javascript - 在 jQuery Mobile 中动态创建可折叠集

javascript - 将 Firestore 添加到现有 Firebase 项目时遇到问题

javascript - 如何计算两个连续数组元素的最大乘积?

javascript - 调整窗口大小时菜单移动

javascript - 如何发布到 url 但重定向到其他位置?

javascript - jQuery爬虫大对象/$.each/Ajax IN然后Ajax OU

ruby-on-rails - 在 ruby​​ 中告诉 .each 循环的结束

javascript - 如何使用 _.where(list,properties) 获取内部数组作为属性?