我正在从事一个涉及相当大且笨拙的代码库的元素。在 jquery 可拖动小部件中有几个隐藏的 div,当单击某些菜单按钮时会显示这些 div。其中之一包含许多表单元素,包括输入和选择框。
问题是点击这些表单元素中的任何一个都没有任何效果。如果我向 onclick 事件、onmousedown 事件或 onmouseup 事件添加警报,它们就会触发。但是,不会触发 onfocus 事件。我可以通过跳转到一个元素来聚焦它。
我的猜测是某处有一个“preventDefault”或“return false”导致了这个问题,但我已经搜索了将近 10,000 行 JQuery/JS 几次,但没有发现似乎与这个问题有关;代码库太大,除非作为最后的努力,否则无法逐行阅读。我也尝试在此线程中搜索许多建议:HTML input fields does not get focus when clicked .
我不知道接下来要尝试什么。我以前从未见过这样的事情。有没有办法查看给定元素的所有事件列表?我在 Chrome 或 FF 检查器中找不到这个选项。这些浏览器有没有办法让它记录所有触发的事件及其结果?我尝试了以下但只返回了一个 keyup 或 change 事件(取决于我点击的是什么):
console.log($(this).data('events'))
如何解决此类问题?
最佳答案
有两件事可能会有所帮助。
在 Chrome -> Right Click -> Inspect Element 右侧有一个“Event Listeners”标签显示所有内容在该元素上工作。
(您可能会看到许多其他 chrome 扩展将事件绑定(bind)到所有内容,隐身或禁用所有扩展将在您调试问题时清除它)
另一种捕获事件的方法是:
在 Chrome -> F12 -> Sources 选项卡 -> 然后按右边的暂停按钮 | | 然后从那时起执行的第一个 javascript 将中断相应代码行的执行,以便您可以单步执行。
关于javascript - 表单元素无法获得焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20206889/