jQuery不能为动态添加的内容添加类
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秒(必须将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;
,因此您意识到它正在工作。试着点击这个链接,你会看到它是如何在警报弹出之前改变背景颜色的。
更新:只是为了寻找答案的人知道。锚元素重新加载页面,因此样式将被设置为初始样式。你正在使用ajax,所以你不希望页面被重新加载,因此你应该传递一个e
参数给你的函数,并在你的onClick
函数上使用e.preventDefault()
来避免锚标记的默认行为。
也许这对你有用,改变这一行:
$(this).addClass('categories_selected'); // DOESN'T WORK
:
$(this).parent().find('.training_management_categories_list_a').addClass('categories_selected');
我不知道为什么,但我以前见过这个问题,并用这种方法解决了
您是否尝试检查元素以查看类是否存在?这通常能帮助我找出问题所在。可能是另一个类重写了你的类的属性…?
- 正在SharePoint 2013母版页中添加JQuery移动文件
- JQuery添加元素需要在我的js之前再次添加JQuery脚本
- 使用.on动态添加jquery/js不知道的html元素
- Rails资产管道-只向head添加jquery
- 如何在XHTML中添加jQuery CDN回退
- 添加JQuery UI在Meteor中添加对象后可调整大小
- 添加jquery Datepicker后,文本框的初始值不会显示
- 添加Jquery验证后,Jquery日期选择器无法工作
- 如何在谷歌博客中添加jQuery而不修改模板
- 从服务器端添加jQuery函数
- 如何在jQuery.awesomeCloud.plugin上添加jQuery工具提示功能
- 动态添加jquery ajax选项
- 正在添加JQuery淡入淡出代码
- 添加 jQuery UI 后,从表中删除行的函数不起作用
- 如何动态添加 jQuery 移动弹出效果到链接
- 如何在 mytemplate 中添加 Jquery
- 在页面加载后动态添加 jquery 日期选择器
- 这是在一个项目中添加Jquery和Angularjs的正确方法
- 滚动到页面末尾后添加 JQuery 微调器
- 在图像不起作用的 src 中添加 jQuery 变量