【问题标题】:console.trace or stack trace to pinpiont the source of a bug in javascript?console.trace 或堆栈跟踪来确定 javascript 中错误的来源?
【发布时间】:2013-02-18 13:43:49
【问题描述】:

我使用了一些复杂的 javascript (jQuery) 创建了一个编辑器,用户可以在其中拖放和调整不同的divs。问题是,有时,似乎没有原因,包含文本的 div 突然“冻结”或“卡在”包含的 div 上并且不能被拖动,尽管仍然维护一个包含 ui-draggable 的类列表,就在我提到之后:

$this.draggable( "option", "disabled", false );

所以从技术上讲,没有理由停止拖动。我使用 Ctrl+Shift+K 来使用 firebug 的 Web 控制台,但是当我拖动东西时不会触发控制台上的任何东西,而且我 不能 也拖动一个特定的东西没有显示任何东西。我尝试过分析,但这些东西只是说明在某个脚本中花费了多少时间。我怎么可能弄清楚为什么元素的拖动只是被关闭并且无法再次打开?我不能设置断点,因为我不知道代码哪里出了问题。这似乎是任意的。有什么方法可以简单地实时查看堆栈上发生的事情?

编辑

在 Firebug 中,我们可以看到一个对象的完整属性列表,比下面这个小屏幕截图中的要多得多。有谁知道我应该关注哪些对象属性,这与我的问题有关?我真的不知道如何诊断问题。

【问题讨论】:

  • 你确定$this是你认为的那样吗?
  • 我愿意。在控制台中,我什至做了$('#elementID').draggable('option','disabled',false);,它仍然无法拖动。但是,如果我使用具有相同元素 ID 的 .text(),我可以得到文本。所以选择元素没有错。
  • 这很可能是“绑定过多”的问题。要调试此问题,您需要将代码分成几部分,并测试添加更多功能/DOM 元素的每一轮。最终你会看到会发生什么。 jQuery 可能会即时覆盖绑定,因此有时会破坏它持有的现有拖放会话。
  • 我正在根据鼠标悬停进行相当多的绑定和取消绑定 - 我正在将对象绑定到可调整大小和可拖动以及许多其他事件。直接destroy绑定再绑定会不会比使用'option', 'disabled'好?
  • 你能设置一个演示来显示这个问题吗?也许在JSFiddle?通常这对确定/缩小问题有很大帮助。

标签: javascript jquery stack-trace


【解决方案1】:

@Allendar - 太多的绑定确实是问题所在。我跟进了这个问题:Am I binding events over and over again in this jQuery code? 并在Visual Event 的帮助下,我摆脱了我一遍又一遍地做的绑定,然后它工作得很好。

【讨论】:

    猜你喜欢
    • 2012-10-29
    • 2015-09-05
    • 2018-09-19
    • 1970-01-01
    • 2015-01-21
    • 2015-10-08
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    相关资源
    最近更新 更多