嗨,我正在尝试动态附加一些div,然后在它们上使用jquery,例如click事件,但它不起作用,我不知道它为什么这样做..
$("#addGenreFinal").click(function () {
var genre = $('#newGenreTxt').val();
$("#txtAddGenreContainer").slideUp();
$('#otherFavContainer').append('<div class="songTilesGenreContainer"><div class="addSongsBtnContainer icons" ><img src="../../Content/images/add.png" style="padding:10px;"/></div><div style="float:right;padding-right:26px;padding- bottom:20px;margin-top:20px;color:#949494;font-size:20px;">' + genre + '</div></div>');
$('#newGenreTxt').val('');
});
$(".songTilesGenreContainer").click(function () {
alert('hello');
});
为什么警报框没有弹出,当我使用其他预先定义的类时,它可以工作,但它不会在dinamically附加元素嗯......
答案 0 :(得分:4)
您应该使用live绑定事件,因为稍后将元素添加到文档
$(".songTilesGenreContainer").live("click", function () {
alert('hello');
});
答案 1 :(得分:1)
$(".songTilesGenreContainer").click(function () {
alert('hello');
});
应改为:
$(".songTilesGenreContainer").live('click', function () {
alert('hello');
});
因为当上面的代码运行时,您尝试绑定的元素不存在。 .live()
就是为了这个目的:
为与当前匹配的所有元素附加事件的处理程序 选择器,现在和将来
以下是.live()
的jQuery文档的链接:http://api.jquery.com/live/
.delegate()
是首选方法。 .delegate()
不会一直冒泡到文档对象,而是将事件冒泡到选定的根元素。文档:http://api.jquery.com/delegate/
.delegate()
$('#otherFavContainer').delegate(".songTilesGenreContainer", 'click', function () {
alert('hello');
});
答案 2 :(得分:1)
$(".songTilesGenreContainer").live("click", function () {
alert('hello');
});
尝试使用live而不是.click。 .click在幕后做了一个绑定。由于.bind仅绑定在执行时存在于DOM上的选择器中的元素,因此它不会找到您的动态内容。即使在代码运行之后,.live也会附加到添加到dom的元素。
答案 3 :(得分:0)
您应该在追加后将点击处理程序添加到流派容器中;因为你要在#addGenreFinal
点击处理程序之外添加它,所以它没有被添加到任何东西中。
您还可以使用.live()
(docs)函数将处理程序添加到尚未创建的选择器中。