在 AJAX 个结果上使用 jquery 更改图标
Change icon using jquery on AJAX results
我在单击 link 后通过 AJAX 返回了一个列表。在列表中,我有一个很棒的字体 link 用于为列表条目添加书签。书签是通过 AJAX 完成的,这工作正常,我的数据库正在更新。
但是,更新后我想将书签图标从 fa-bookmark-o
更改为 fa-bookmark
并添加 class green
以使图标变为绿色。这是行不通的。代码如下。
HTML:
<a href="#" id="bookmark" class="bookmark" title="Bookmark" bookmark_id="12345"><i class="fa fa-bookmark-o"></i><i class="fa fa-bookmark"></i></a>
CSS
.bookmark:hover .fa-bookmark-o,
.bookmark .fa-bookmark
{
color: #27ae60;
display: none;
text-decoration: none;
}
.bookmark:hover .fa-bookmark
{
color: #27ae60;
display: inline;
text-decoration: none;
}
脚本
<script type="text/javascript">
$(document).on('click', '#bookmark', function(e) {
var bookmark_id = $(this).attr('bookmark_id');
$("#loaderIcon").show();
$.ajax({
type: 'POST',
url: '<?php echo base_url(); ?>bookmark',
data: {'<?php echo $this->security->get_csrf_token_name(); ?>' : '<?php echo $this->security->get_csrf_hash(); ?>', bookmark_id},
dataType: 'json',
success:function(data){
if(data.status == 'X')
{
$(this).find('i').removeClass('fa-bookmark-o');
$(this).find('i').addClass('fa-bookmark');
$(this).find('i').addClass('green');
}
},
});
});
</script>
this
在 AJAX 调用的回调中与事件处理程序不同。
有多种解决方案,最简单的一种是将变量存储在闭包中并在 AJAX 处理程序中使用它
$(document).on('click', '#bookmark', function(e) {
var me = $(this);
var bookmark_id = me.attr('bookmark_id');
$("#loaderIcon").show();
$.ajax({
type: 'POST',
url: '<?php echo base_url(); ?>bookmark',
data: {'<?php echo $this->security->get_csrf_token_name(); ?>' : '<?php echo $this->security->get_csrf_hash(); ?>', bookmark_id},
dataType: 'json',
success:function(data){
if(data.status == 'X')
{
me.find('i').removeClass('fa-bookmark-o');
me.find('i').addClass('fa-bookmark');
me.find('i').addClass('green');
}
},
});
});
还有其他可能的改进,但我专注于用最少的更改来解决问题
其他方式:粗箭头函数,Function.bind
您应该将当前对象 $(this)
存储在一个变量中,然后在成功回调中使用它,因为成功回调中的 $(this)
指的是 [=19] 的 jqXHR
对象=] 调用,不再点击 bookmark
:
$(document).on('click', '#bookmark', function(e) {
var _this = $(this);
...
success:function(data){
if(data.status == 'X')
{
_this.find('i').removeClass('fa-bookmark-o');
_this.find('i').addClass('fa-bookmark green');
}
},
...
});
希望对您有所帮助。
我在单击 link 后通过 AJAX 返回了一个列表。在列表中,我有一个很棒的字体 link 用于为列表条目添加书签。书签是通过 AJAX 完成的,这工作正常,我的数据库正在更新。
但是,更新后我想将书签图标从 fa-bookmark-o
更改为 fa-bookmark
并添加 class green
以使图标变为绿色。这是行不通的。代码如下。
HTML:
<a href="#" id="bookmark" class="bookmark" title="Bookmark" bookmark_id="12345"><i class="fa fa-bookmark-o"></i><i class="fa fa-bookmark"></i></a>
CSS
.bookmark:hover .fa-bookmark-o,
.bookmark .fa-bookmark
{
color: #27ae60;
display: none;
text-decoration: none;
}
.bookmark:hover .fa-bookmark
{
color: #27ae60;
display: inline;
text-decoration: none;
}
脚本
<script type="text/javascript">
$(document).on('click', '#bookmark', function(e) {
var bookmark_id = $(this).attr('bookmark_id');
$("#loaderIcon").show();
$.ajax({
type: 'POST',
url: '<?php echo base_url(); ?>bookmark',
data: {'<?php echo $this->security->get_csrf_token_name(); ?>' : '<?php echo $this->security->get_csrf_hash(); ?>', bookmark_id},
dataType: 'json',
success:function(data){
if(data.status == 'X')
{
$(this).find('i').removeClass('fa-bookmark-o');
$(this).find('i').addClass('fa-bookmark');
$(this).find('i').addClass('green');
}
},
});
});
</script>
this
在 AJAX 调用的回调中与事件处理程序不同。
有多种解决方案,最简单的一种是将变量存储在闭包中并在 AJAX 处理程序中使用它
$(document).on('click', '#bookmark', function(e) {
var me = $(this);
var bookmark_id = me.attr('bookmark_id');
$("#loaderIcon").show();
$.ajax({
type: 'POST',
url: '<?php echo base_url(); ?>bookmark',
data: {'<?php echo $this->security->get_csrf_token_name(); ?>' : '<?php echo $this->security->get_csrf_hash(); ?>', bookmark_id},
dataType: 'json',
success:function(data){
if(data.status == 'X')
{
me.find('i').removeClass('fa-bookmark-o');
me.find('i').addClass('fa-bookmark');
me.find('i').addClass('green');
}
},
});
});
还有其他可能的改进,但我专注于用最少的更改来解决问题
其他方式:粗箭头函数,Function.bind
您应该将当前对象 $(this)
存储在一个变量中,然后在成功回调中使用它,因为成功回调中的 $(this)
指的是 [=19] 的 jqXHR
对象=] 调用,不再点击 bookmark
:
$(document).on('click', '#bookmark', function(e) {
var _this = $(this);
...
success:function(data){
if(data.status == 'X')
{
_this.find('i').removeClass('fa-bookmark-o');
_this.find('i').addClass('fa-bookmark green');
}
},
...
});
希望对您有所帮助。