slideUp 和 slideDown jQuery

slideUp and slideDown jQuery

我有一个 table,我可以在其中单击带有 class .details 的行 ()。这将显示带有 id="details" 的 div,其中包含有关行中元素的额外信息。

我有以下代码。

$('.details').click(function () {
    $('#details').slideUp('slow');
    $('#details').load($(this).data('url'), { id: $(this).data('id') }, function () {
        $(this).slideDown('slow');
    });
});

但是我希望加载 (.load()) 在 .slideUp() 之后发生,因为加载是在元素向上滑动时开始的(看起来很奇怪)。我尝试通过以下方式将其添加为回调函数:

$('#details').slideUp('slow', function () {
    $('#details').load($(this).data('url'), { id: $(this).data('id') }, function () {
        $(this).slideDown('slow');
    });
});

但是,这会阻止代码运行。有人知道如何解决这个问题吗?

谢谢。

编辑:

我的 table 行如下所示:

<tr class="details" data-id="@item.VehicleID" data-url="@Url.Action("Details", "Vehicle")">
</tr>

我的 div 看起来如下:

<div id="details"></div>

我在您的代码中看到的一个问题是,您正在使用 $(this).data('url') 将 url 数据属性值设置为被单击的 tr。但 $(this) 实际上是那里的 $('#details'),因为您在 $('#details') 的 slideUp 中访问它,它没有 url 数据属性。所以你一定遇到了错误

解决方案是将 $(this)(单击的行)分配给局部变量并在其他回调函数中使用它。

这应该有效。

$(function () {


    $('.details').click(function () {
        var _this = $(this);

        $('#details').slideUp('slow', function () {
            $('#details').load(_this.data('url'), { id: _this.data('id') }, function () {
                $('#details').slideDown('slow');
            });
        });
    });

});