jquery margin不会在第一次点击时适应

时间:2014-04-11 11:43:40

标签: jquery css function event-handling show

如果你点击一个带有类&#34的元素;可点击",一个div"显示"会出现。 "显示的高度" div不相等。 根据这个div的高度,另一个div"容器的顶部边缘"应该适应。 但是,这适用于第一次点击,但不适用于连续点击:来自第二次"可点击"总是需要两次点击:第一次点击会加载内容,第二次点击会调整上边距。

$(document).ready(function(){
var display = $("#display");
var clickable = $(".clickable");
display.hide();

clickable.click(function(){
    var clickableid = clickable.attr('id');
    $.ajax({
        cache: false,
        type: 'get',
        url: 'process.php?id=' + clickableid,
        dataType: 'html',
        success: function(content) {
            $('#display').load('process.php?id=' + clickableid);
            display.show(function(){
                var newmargin = $("#display").height();
                $('#container').css({"margin-top": + newmargin});
            });
        }
    });
});

而不是:

    display.show(function(){
        var newmargin = $("#display").height();
        $('#container').css({"margin-top": + newmargin});
    });

我也尝试过:

    display.show()
    var newmargin = $("#display").height();
    $('#container').css({"margin-top": + newmargin};

不幸的是无济于事:只有出现的方式不同。 有想法的人吗?

2 个答案:

答案 0 :(得分:0)

我无法评论所以我必须提供一个真的不是的答案,但我认为你想要查看.done(function( data ){...})成功并不一定意味着DOM已经完成呈现结果获得。

  

这些方法接受$ .ajax()请求终止时调用的一个或多个函数参数。这允许您在单个请求上分配多个回调,甚至在请求完成后分配回调。 (如果请求已经完成,则立即触发回调。)

另外,我对调用.load()时发出的第二个请求感到困惑,这是一种完全按照$.ajax请求执行操作的同步方式(??)

JQuery .ajax() docs

答案 1 :(得分:0)

编写css()方法的正确方法是没有加号,如下所示:$('#container').css({"margin-top": newmargin};