slideUp和slideDown jQuery

时间:2016-11-03 14:28:25

标签: javascript jquery asp.net-mvc jquery-animate jquery-load

我有一个表格,我可以在其中点击带有.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');
    });
});

然而,这会阻止代码工作。有没有人知道如何解决这个问题?

感谢。

编辑:

我的表格行如下所示:

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

我的div看起来如下:

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

1 个答案:

答案 0 :(得分:1)

我在您的代码中看到的一个问题是,您使用$(this).data('url')将url数据属性值设置为单击的tr。但$(this)实际上是$('#details'),因为您在$('#details')的幻灯片中访问它,它没有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');
            });
        });
    });

});