我正在尝试向正在动态添加到页面的元素添加多个事件侦听器。我试图使用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来移除动态添加,则效果很好。
感谢您提供的一切!
答案 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。