【问题标题】:Adding listeners to Dynamically Added Elements将侦听器添加到动态添加的元素
【发布时间】:2013-06-15 23:33:03
【问题描述】:

我正在尝试向动态添加到页面的元素添加多个事件侦听器。我尝试使用 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 可以使动画功能起作用。如果我通过单击删除动态添加并放置一些静态,效果很好。

感谢您提供的任何东西!

【问题讨论】:

    标签: javascript jquery html listener


    【解决方案1】:

    在您的情况下,您需要使用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。

    【讨论】:

    • 行得通!我使用了 body 容器,因为它是唯一的父级,因为这是一个非常简单的页面。出于好奇,我将“.red,.green,...”切换为“div”,但它不起作用。为什么该选择器的区别很重要?元素都是
      ,所以'div'不应该选择它们吗?
    • 它会在你将其设为 div 时起作用。在你的情况下,因为你什么都没有,那么你可以使用 div 本身。但是你的语法是错误的。你应该说$(document).on('keydown', 'div',如果你说$('div')...,你正在这样做,它只会在一个div中寻找div。这不是你的情况。 hance 它不工作。
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签