jQuery beforeSend:$(this).after not working

时间:2013-06-26 18:39:12

标签: javascript jquery html

我很困惑为什么这段代码不起作用:

HTML:

<li><a id="faktura-generate" rel="regular">Faktúra</a></li>
<li><a id="proforma-generate" rel="proforma">Zálohová faktúra</a></li>

JS:

$('#faktura-generate, #proforma-generate').live('click', function () {
    var type = $(this).attr('rel');
    $.ajax({
        url: 'index.php?route=sale/order/superfaktura&token=<?php echo $token; ?>&order_id=<?php echo $order_id; ?>&type=' + type,
        dataType: 'json',
        beforeSend: function () {
            $(this).after('<img src="view/image/loading.gif" class="loading" style="padding-left: 5px;" />');
        }
    });
}); 

我想在用户点击其中一个链接后显示一个小的加载图标。 $("#proforma-faktura").after(...)正在运行,但$(this).after(...)没有。

1 个答案:

答案 0 :(得分:3)

this并不是指您传递给'beforeSend'的匿名函数中的元素。

您可以尝试在闭包中捕获它

$('#faktura-generate, #proforma-generate').live('click', function () {
    var that = this,  //  capture 'this' here
        type = $(this).attr('rel');

    // make a function with access to 'that'
    var myFun = function (data) {
        $(that).after('<img src="view/image/loading.gif" class="loading" style="padding-left: 5px;" />');
    };

    $.ajax({
        url: 'index.php?route=sale/order/superfaktura&token=<?php echo $token; ?>&order_id=<?php echo $order_id; ?>&type=' + type,
        dataType: 'json',
        beforeSend: myFun
    });
});

试一试。

也不再支持直播,尝试另一种方式。 (弃用的版本:1.7,删除:1.9)