我有两组不同的代码,唯一的区别是$(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
});
});
答案 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
的价值是什么。