在ajax之后更改DOM时重新绑定函数

时间:2017-05-04 17:27:23

标签: javascript jquery ajax

我试图在ajax调用之前和之后获取元素的高度以更改此元素的内容(出于学习原因)。

示例:



$(document).ready()
     calcHeigth('#listar-cursos');       
 });
funcion calcHeigth(idElement){
   console.log($(idElement).outerHeight(true));
}

<div id="listar-cursos">all the content is here</div>
&#13;
&#13;
&#13;

文档准备就绪后,calcHeigth函数返回200px。

该页面上有一个由ajax发送的表单,当请求结束时,我只清空元素的内容,然后再次调用calcHeigth(在ajaxComplete事件中)。

$("#formSeacrh").submit(function () {
        if ($(this).valid()) {
            var url = $(this).attr("action");
            var data = $(this).serialize();

            $.ajax({
                type: "POST",
                url: url,
                data: data,
                contentType: "application/x-www-form-urlencoded; charset=UTF-8",
                success: function (data) {
                    $("#listar-cursos").html("");                  
                },
                complete: function () {
                    Completo();                    
                },
                beforeSend: function () {
                    Carregando();
                },
                error: function () {
                    Falha();                    
                },
                ajaxComplete: function () {
                    calcHeigth('#listar-cursos');
                }
            })            

            return false;
        }
        return false;
    });

calcHeigth的结果总是200px,就像文档准备好时一样,即使是空元素也是如此。 calcHeigth没有意识到元素已被更改。我预期的结果是40px。如何修复并获得当前高度?

1 个答案:

答案 0 :(得分:0)

$("#formSeacrh").submit(function () {
    if ($(this).valid()) {
        var url = $(this).attr("action");
        var data = $(this).serialize();

        $.ajax({
            type: "POST",
            url: url,
            data: data,
            contentType: "application/x-www-form-urlencoded; charset=UTF-8",
            success: function (data) {
                $("#listar-cursos").html("");   
                Completo();
                calcHeigth('#listar-cursos');
            },
            beforeSend: function () {
                Carregando();
            },
            error: function () {
                Falha();                    
            }
        })            
        return false;
    }
    return false;
});

你只需要1个就绪功能,而不是3.我希望现在可以按你的意愿使用。

如果在清除节点中的html后进行计算,则高度应为0。

顺便说一下。 $('listar-cursos').empty()优于.html("")