jquery - 即使在 ajax 调用之外将值分配给 DOM 之后,$(this) 也不会在 ajax 成功中触发

标签 jquery

已关注 these instructions

我将 this 分配给 var 元素

var element = this;

在 AJAX 调用之前,它工作正常并且被正确调用

$(element).parent('.refreshstats').html('<i class="fa fa-refresh refresh-stats fa-spin" id="'+id+'" url="'+url+'"></i>');

如果我尝试在成功回调中再次调用它,它不会触发

$(element).parent('.refreshstats').html('<i class="fa fa-refresh refresh-stats" id="'+id+'" url="'+url+'"></i>');

JQUERY

$(document).on('click', '.refresh-stats', function() {
    var id = $(this).attr('id');
    var url = $(this).attr('url');
    var element = this;
    $(element).parent('.refreshstats').html('<i class="fa fa-refresh refresh-stats fa-spin" id="'+id+'" url="'+url+'"></i>');
    $.ajax({
        type: "POST",
        url: "refresh-stats.php",
        data:({id: id, url: url}),
        success: function(data) {
            $(element).parent('.refreshstats').html('<i class="fa fa-refresh refresh-stats" id="'+id+'" url="'+url+'"></i>');
            var result = $.parseJSON(data);
            if (result[0] == 'No') {
                $('.indexed[data-pk="'+id+'"]').html('<span class="label label-danger">No</span>')
            }
            if (result[0] == 'Yes') {
                $('.indexed[data-pk="'+id+'"]').html('<span class="label label-success">Yes</span>')
            }
            if (result[1] == 'No') {
                $('.dindexed[data-pk="'+id+'"]').html('<span class="label label-danger">No</span>')
            }
            if (result[1] == 'Yes') {
                $('.dindexed[data-pk="'+id+'"]').html('<span class="label label-success">Yes</span>')
            }
            if (result[2] == 'No') {
                $('.removed[data-pk="'+id+'"]').html('<span class="label label-danger">No</span>')
            }
            if (result[2] == 'Yes') {
                $('.removed[data-pk="'+id+'"]').html('<span class="label label-success">Yes</span>')
            }
        }
    });
});

最佳答案

这是一个 XY 问题。

您可能只想更改类 - 并且您必须使用正确的类名 - 我使用了 .refresh-stats 因为您在 .refreshstats 上遇到了错误。

$(document).on('click', '.refresh-stats', function() {
    var id = this.id;
    var url = $(this).attr('url');
    var $element = $(this); // store the jQuery object
    $(this).addClass("fa-spin"); // set the spinner
    $.ajax({
        type: "POST",
        url: "refresh-stats.php",
        data:({id: id, url: url}),
        success: function(data) {
            $element.removeClass("fa-spin"); // remove the spinner

我还建议更改

中的文档

$(document).on('click', '.refresh-stats', function() {

到静态父元素的选择器,因为它更有效

关于jquery - 即使在 ajax 调用之外将值分配给 DOM 之后,$(this) 也不会在 ajax 成功中触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30254823/

相关文章:

javascript - Turn.js 更多控件制作按钮

javascript - 显示和隐藏 SELECT 更改中动态创建的表行

javascript - 如何在 jquery 中获取多个延迟调用的 ajax 结果?

javascript - 在 Ajax 中将字符串作为参数传递

javascript - 仅当当前未将鼠标悬停在按钮上时才逐渐淡出按钮

php - 如何在不刷新页面的情况下从数据库字段更新页面上的文本?

javascript - 是否有一个 JavaScript/Jquery 组件可以像 Eclipse 一样创建工作区?

javascript - 根据单元格的值显示/隐藏表格行

jquery - 未捕获的类型错误 : Object [object Object] has no method 'autocomplete'

javascript - Rails ajax 从集合中追加单个项目