如何在AJAX成功中使用$(this)?

问题描述 投票:1回答:2

表格的每一行都有按钮。当用户单击它时,会触发sweetalert以显示确认窗口。如果用户单击“是”,则执行AJAX以发布行值。

后期处理正在运行,但我无法在AJAX成功调用后更改按钮属性和标签文本。这是我的剧本。

$("#tbl_list_pemenuhan tbody").on('click','.btn_memo', function() {                 

    var no_penuh    = $(this).closest('tr').find("td:eq(1)").text();
    var no_minta    = $(this).closest('tr').find("td:eq(2)").text();

    var data        = 'no_pnh='+no_penuh+'&no_mnt='+no_minta;


    swal({
        title               : "Apa anda yakin?",
        type                : "warning",
        showCancelButton    : true,
        confirmButtonColor  : "#0C0",
        confirmButtonText   : "Ya!",
        cancelButtonText    : "Batal",
        closeOnConfirm      : true
    },function(){

        var elem = $(this);

        $.ajax({
            type    : "POST",
            url     : "<?php echo site_url('con_atk/buat_memo_direct'); ?>",                        
            data    : data,                     
            success : function(data){   
                elem.attr('disabled','disabled');
                elem.closest('tr').find('label').text('SENT');

                alert("SUCCESS");
            }
        });             
    });     
});

注意:在AJAX成功中,警报被执行但不是elem

jquery ajax sweetalert
2个回答
1
投票

问题的原因

函数声明你拥有自己的this,所以使用$(this)不再获得触发事件的元素。

解决方案1

在内部var elem = $(this);(包含ajax调用的那个)之外定义function()

解决方案2

bind结尾的this function() { ... }.bind(this)

解决方案3(ES6)

箭头函数没有自己的this,所以用function()替换()=>也可以完成这项工作,但只有在支持ES6的浏览器中运行它(或者如果你使用像Babel这样的转换程序)时它才会起作用。


0
投票

您还可以获取事件对象:

$("#tbl_list_pemenuhan tbody").on('click','.btn_memo', function(event) {

然后使用:

var elem = $(event.target);
© www.soinside.com 2019 - 2024. All rights reserved.