【发布时间】:2014-08-21 22:14:56
【问题描述】:
我知道如果我动态添加内容,我必须使用 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
【问题讨论】:
-
你必须阻止默认操作,否则页面将被重新加载......所以要么从事件处理程序中获取
return false,要么在处理程序中接收到event参数后调用event.preventDefault()跨度> -
我认为
:hover风格会妨碍您。 -
@ArunPJohny 哦,伙计……是的,你当然是对的。我快要发疯了。谢谢!您为什么不将此作为答案发布?
-
大声笑我错过了,锚元素重新加载页面哈哈
-
刚刚更新了我的答案,让人们知道问题出在哪里。
标签: javascript jquery css ajax