“切换”事件后的jQuery动作

时间:2011-05-07 08:31:55

标签: jquery load switch-statement

我创建了一个地图,用户可以从一个建筑物走到另一个建筑物。在地图旁边有一个小的小地图。使用load()命令刷新“大”映射。我有以下代码:

    $(document).keydown(function(event) {

        switch (event.keyCode) {

            // A
            case 65: $("#world").load("../modules/Map.php?go&move=w"); break;

            // W
            case 87: $("#world").load("../modules/Map.php?go&move=n"); break;

            // D
            case 68: $("#world").load("../modules/Map.php?go&move=e"); break;

            // S
            case 83: $("#world").load("../modules/Map.php?go&move=s"); break;

        }

    });

现在,在按下其中一个键之后,我想要执行以下操作:

$("#minimap").load("../modules/Minimap.php");

我希望你能帮助我。

1 个答案:

答案 0 :(得分:5)

你有两个选择,但首先,让我们稍微重构一下(我稍后会重构一下,但让我们从这开始):

$(document).keydown(function(event) {
    var direction;

    switch (event.keyCode) {

        // A
        case 65: direction = 'w'; break;

        // W
        case 87: direction = 'n'; break;

        // D
        case 68: direction = 'e'; break;

        // S
        case 83: direction = 's'; break;
    }

    if (direction) {
        $("#world").load("../modules/Map.php?go&move=" + direction);
    }
});

现在第一次加载是集中的,我们不会重复自己。

好的,你有两个选择:

  1. 如果您希望两个switch同时发生,请将其放在load语句之后。例如,最后回升:

    if (direction) {
        $("#world").load("../modules/Map.php?go&move=" + direction);
        $("#minimap").load("../modules/Minimap.php");
    }
    

    我假设我们只想在密钥匹配时才这样做。如果我错了,请将其移出if

  2. 如果您希望第二次加载等到第一次加载完成,请使用第一个success上的load回调。

    if (direction) {
        $("#world").load("../modules/Map.php?go&move=" + direction, function() {
            // This gets called when the load completes
            $("#minimap").load("../modules/Minimap.php");
        });
    }
    
  3. 更多the docs


    以下是更彻底的重构版本:请:

    var directionKeyMap = {
        '65': 'w',  // A
        '87': 'n',  // W
        '68': 'e',  // D
        '83': 's'   // S
    };
    

    然后这个(上面的选项1):

    $(document).keydown(function(event) {
        var direction;
    
        direction = directionKeyMap[event.keyCode];
        if (direction) {
            $("#world").load("../modules/Map.php?go&move=" + direction);
            $("#minimap").load("../modules/Minimap.php");
        }
    });
    

    或者这个(上面的选项2):

    $(document).keydown(function(event) {
        var direction;
    
        direction = directionKeyMap[event.keyCode];
        if (direction) {
            $("#world").load("../modules/Map.php?go&move=" + direction, function() {
                $("#minimap").load("../modules/Minimap.php");
            });
        }
    });
    

    那些使用对象将键码映射到方向,利用您可以使用括号表示法查找对象属性的事实。

    (不要担心keyCode是一个数字,但我们地图中的键是字符串;每当你使用括号表示法时,你提供的任何内容都会被JavaScript解释器转换为字符串。事实上,这就是即使你索引到一个数组,因为JavaScript数组aren't really arrays。但同样,我们使用的是普通对象,而不是数组。)