$(this)没有在回调函数中选择元素

时间:2012-01-26 05:42:11

标签: javascript jquery

我有两组不同的代码,唯一的区别是$(this).closest('.organizer_listing').slideUp('fast');的位置。在第一组代码中,它可以工作,但我更喜欢那行代码与回调函数中的第二组代码一样,它不再起作用 - slideUp似乎没有被执行。

为什么会这样?我该如何解决?

变体1

$("input[type=checkbox]:checked").each(function() {
    $(this).closest('.organizer_listing').slideUp('fast');  // Remove listings visually from list
    // Send AJAX request to delete from database
    var listing_id = $(this).closest('.organizer_listing').data('listing_id');
    $.ajaxSetup({ cache: false });
    $.getJSON(base_url + 'organizer/delete_favorite',
        {listing_id: listing_id},
        function(json) {
            $.modal.close();
    });
});

变体2

$("input[type=checkbox]:checked").each(function() {
    // Send AJAX request to delete from database
    var listing_id = $(this).closest('.organizer_listing').data('listing_id');
    $.ajaxSetup({ cache: false });
    $.getJSON(base_url + 'organizer/delete_favorite',
        {listing_id: listing_id},
        function(json) {
            $.modal.close();
            $(this).closest('.organizer_listing').slideUp('fast');  // Remove listings visually from list
    });
});

2 个答案:

答案 0 :(得分:1)

变体2不起作用,因为在$.getJSON回调中,this不再是each循环中的当前元素,而是jqXHR对象。< / p>

您可以通过将this的值保存到新变量来轻松解决此问题,您的回调将“关闭”(有权访问):

var self = this;
$.getJSON(base_url + 'organizer/delete_favorite',
        {listing_id: listing_id},
        function(json) {
            $.modal.close();
            $(self).closest('.organizer_listing').slideUp('fast');  // Remove listings visually from list
});

答案 1 :(得分:0)

它不再起作用,因为this的回调中的$.getJSON不再是您的复选框!

这样做:

$("input[type=checkbox]:checked").each(function() {

    var $cb = $(this); // save your ref to the checkbox

    var listing_id = $cb.closest('.organizer_listing').data('listing_id');
    $.ajaxSetup({ cache: false });
    $.getJSON(base_url + 'organizer/delete_favorite',
        {listing_id: listing_id},
        function(json) {
            $.modal.close();

            // use $cb
            $cb.closest('.organizer_listing').slideUp('fast');

    });
});

当你想要使用它时,你应该总是问自己当前环境中this的价值是什么。