在jQuery中检查动态生成的元素?

时间:2014-06-07 14:58:32

标签: javascript jquery

请考虑以下代码:

function autoRecursiveLoad(checkingElementId) {
    if (checkingElementId.length) {
        return;
    }
    else {
        var targetId = $("#targetContent");
        var requestUrl = $('#ajaxUrl').val();

        $.ajax({
            url: requestUrl,
            cache: false,
            type: "POST",
            async:false,
            beforeSend: function(){
            },
            complete: function(){
                autoRecursiveLoad(checkingElementId);
            },
            success: function(data) {
                targetId.append(data);
            }, 
            error: function(e) {
            }
        });
    }
}
代码中的

checkingElementId是动态生成元素的id。我使用checkingElementId.length查看它是否已经存在,如果没有,发送ajax请求加载内容,创建id为checkingElementId的div然后追加到targetId,然后执行递归调用

问题是id为checkingElementId的div是否已成功生成,但检查它是否存在的代码(checkingElementId.length)从未起作用。因此,上述功能将永远循环。我做错了吗?

1 个答案:

答案 0 :(得分:0)

我不知道它是否是最佳解决方案,但这对我有用,我会动态触发DOMNodeInserted事件,因此该函数更新如下:

function autoRecursiveLoad(checkingElementId) {
    $(document).on('DOMNodeInserted', checkingElementId, function () {
        // do something when the new dynamically generated item (checkingElementId) added to the page
     });
    if (checkingElementId.length) {
        return;
    }
    else {
        var targetId = $("#targetContent");
        var requestUrl = $('#ajaxUrl').val();

        $.ajax({
            url: requestUrl,
            cache: false,
            type: "POST",
            async:false,
            beforeSend: function(){
            },
            complete: function(){
                autoRecursiveLoad(checkingElementId);
            },
            success: function(data) {
                targetId.append(data);
            }, 
            error: function(e) {
            }
        });
    }
}