2014-06-12 97 views
1
// 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()他们可以查看单个测试。jQuery无限嵌套性能不好吗?

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

虽然这样做工作,我注意到我经常这样做。 这是不好的逻辑还是坏的表现?

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

回答

1

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

至少这是它从代码中看起来的样子。这可能取决于文档的结构。

+0

那么当'open-ungraded-test'被点击时,它实质上就是抹掉了这个元素。这是否重置了点击处理程序,或者即使元素消失,它仍然存在? – KickingLettuce

+1

如果这些元素从dom中删除,那么处理程序将与它们一起被删除。这不会是一个问题。对不起,我错过了。 – recursive

+0

如果是这样,并且没有堆栈溢出,我想上面的代码是正确的。 – KickingLettuce

0

我结束了没有改变任何东西,并与我以上所述。

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