将侦听器添加到动态添加的元素

时间:2013-06-15 23:33:04

标签: javascript jquery html listener

我正在尝试向正在动态添加到页面的元素添加多个事件侦听器。我试图使用on()函数,如许多帖子中所示,但它们似乎都不起作用。单击页面时,应添加新的格式,格式由正确的CSS类确定。当一个特定的焦点时,它应该可以使用WASD和jquery animate()移动。这就是我现在所拥有的:

$(document).ready( function() {
var $index = 0;
$('div').on('keydown', 'div' , function(key) {
    switch(parseInt(key.which,10)) {
        case 87: //W
            $(this).animate({top: '-=10px'}, 'fast');
            break;
        case 65: //A
            $(this).animate({left: '-=10px'}, 'fast');
            break;
        case 83: //S
            $(this).animate({top: '+=10px'}, 'fast');
            break;
        case 68: //D
            $(this).animate({left: '+=10px'}, 'fast');
            break;
        default:
            break;
    }
});
$(document).click( function() {
    // if(key.which == 13)
    {
        var $toadd = "<div class='";
        switch($index % 4)
        {
            case 0:
                $toadd += "red' tabindex='"+ ($index + 1) + "'></div>";
                $index++;
                break;
            case 1:
                $toadd += "green' tabindex='"+ ($index + 1) + "'></div>";
                $index++;
                break;
            case 2:
                $toadd += "blue' tabindex='"+ ($index + 1) + "'></div>";
                $index++;
                break;
            case 3:
                $toadd += "yellow' tabindex='"+ ($index + 1) + "'></div>";
                $index++;
                break;
            default:
                break;
        }
        $('body').append($toadd);
        // $('body').on('click keydown','div', function() {
        //     $('body').append($toadd);
        // });
    }
});
});

目前,通过单击页面添加DIV,但无法使用WASD移动。 s可以集中用于动画功能。如果我通过单击并放置一些静态s来移除动态添加,则效果很好。

感谢您提供的一切!

1 个答案:

答案 0 :(得分:0)

您需要使用on()进行事件委派。

$(document).on('keydown', '.red, .green, .blue, .yellow' , function(key) //Instead of document use a container that exists in DOM at any given time to have the event delegated to these divs.

通过这种方式,您可以将事件附加到文档头或任何包含这些div的容器中,并将哪些内容委托给现在存在或将来添加的任何div。