[英]jQuery cannot add class to dynamically added content
我知道,如果我动态添加内容,则必须使用on()为父元素使用事件处理程序。 但是,当我在动态添加的内容上使用addClass时,该类立即消失。
这是HTML的相关部分(只是为了确保我不会错过错字):
<div id="training_management_categories_items">
<ul style="list-style: none; margin-left:0px; margin-top:0px; padding:0px;" id="training_management_categories_items_ul">
</ul>
</div>
这是添加动态元素的代码:
function GetCategories()
{
var url = './ajax/training_management_data.php';
$('#training_management_categories_items').html('<ul style="list-style: none; margin-left:0px; margin-top:0px; padding:0px;" id="training_management_categories_items_ul"></ul>');
$('#training_management_categories_items_ul').append(' \
<li class="training_management_categories_list"> \
<a href="" class="training_management_categories_list_a" id="training_management_categories_list_a_all">All</a> \
</li> \
');
$.ajax({
url: url,
type: "POST",
data: "action=get_categories",
dataType: 'json',
success: function (data) {
$.each(data, function(index, data) {
$('#training_management_categories_items_ul').append(' \
<li class="training_management_categories_list"> \
<a href="" class="training_management_categories_list_a" id="training_management_categories_list_a_'+data.id+'">'+data.name+'</a> \
</li> \
');
});
}
});
}
$(document).ready(function() {
GetCategories();
});
但是,当我单击该元素时,该类的添加时间仅为0.1秒(必须将.categories_selected
的background-color
.categories_selected
为红色才能看到它),但我不知道为什么。
$('#training_management_categories_items').on('click', '.training_management_categories_list_a', function () {
$(this).addClass('categories_selected'); // DOESN'T WORK
alert( $( this ).text() ); // THIS WORKS
});
因此,如果我单击动态创建的元素之一,它将显示文本(例如,“ All”(不是从php提取的,但您知道了)),但不会永久添加该类。
而对于我来说,绝对要确保我没有错过任何真正愚蠢的东西,这是CSS:
a.training_management_categories_list_a {
text-decoration:none;
display:block;
background-image:url("img/icons/folder.png");
background-size:16px 16px;
padding-left:25px;
background-repeat:no-repeat;
font-size:9pt;
background-position:4px 2px;
height:20px;
padding-top:2px;
}
a.training_management_categories_list_a:hover {
background-color:#aaa;
}
a#training_management_categories_list_a_all {
font-weight:bold;
}
a.categories_selected {
background-color:#aaa !important;
}
我在这里想念什么吗?
编辑:使用jquery-1.10.2.js
您的代码还可以,我在jsfiddle中进行了尝试: http : //jsfiddle.net/carloscalla/n42m6gpf/1/
发生的是,您在a.categories_selected
中设置的颜色与之前(悬停时)的颜色相同,我将其更改为黄色background-color: yellow !important;
所以您意识到它正在工作。 尝试单击链接,您将在警报弹出之前看到它如何更改背景颜色。
更新:仅适用于寻找答案的人。 Anchor元素会重新加载页面,因此样式将设置为初始样式。 您正在使用ajax,因此您不希望重新加载页面,因此应将e
参数传递给函数,并在onClick
函数上使用e.preventDefault()
以避免锚标记的默认行为。
也许这对您有用,更改此行:
$(this).addClass('categories_selected'); // DOESN'T WORK
对此:
$(this).parent().find('.training_management_categories_list_a').addClass('categories_selected');
我不知道为什么,但是我以前已经看到过这个问题,并且已经用这种方法解决了。
您是否尝试过检查元素以查看是否存在该类? 通常,这可以帮助我确定问题所在。 可能是另一个类正在覆盖您的类的属性...?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.