jQuery Infinite嵌套对性能有害吗?

时间:2014-06-12 15:30:23

标签: javascript jquery

// page load 
InitTeacherLinks()

function InitTeacherLinks()
{
    $(".open-ungraded-test").click(function()
    {
        $.post("class_viewer.php", {
            _open_lesson_direct : 1
        }, function(data)
        {
            $("#content_display").html(data);
             InitGradingActions(test_taken_id); // Notice this Call

        });

    })

}

function InitGradingActions(test_taken_id)
{

    $("#save_grading").click(function()
    {
        $.post("class_viewer.php", {
            _save_graded_test : 1

        }, function(data)
        {
            $("#content_display").html(data);
            InitTeacherLinks(); // Is this Circular logic?
        });
    });

}

基本上,我有div名为content_display,显示了一系列测试。在我加载完整的测试后,我必须使每个测试链接都可以点击。所以我在这个函数中这样做:InitTeacherLinks()他们可以在那里查看单个测试。

用户可以退出测试并返回原始测试列表。所以我必须在子函数中再次调用函数

虽然这可行,但我注意到我经常这样做。 这是错误的逻辑还是性能不好?

注意:我只能想到一个可能的原因。如果我错了,请纠正我。单击save_grading时,它会有效地破坏对原始(父函数)的引用,因此我们只需重新初始化它,而不是创建重复引用。这是对的吗?

2 个答案:

答案 0 :(得分:1)

我不认为代码存在堆栈溢出问题,但看起来确实可能存在错误。每次执行InitTeacherLinks()时,都会为.open-ungraded-test分配一个新的点击处理程序。这意味着每次InitTeacherLinks()运行时,在该点击期间会有一个额外的ajax帖子,这可能很多。

至少从代码看起来如何。这可能取决于您的文档结构。

答案 1 :(得分:0)

我最终没有改变任何东西,而是按照我上面所做的去做。

因为每次元素被销毁时点击事件都是非绑定的,所以这不是创建我无关紧要的无限循环(或Stackoverflow错误)。问题中的代码是正确的。