JS初始化正确,但仍然不能运行,除非我把它放入控制台

JS initiating correctly, but still won't run unless I put it into the console

本文关键字:非我 运行 控制台 不能 初始化 JS      更新时间:2023-09-26

在我输出我的标记(就在</body>:

之前)之后,我运行了这个程序。
$(document).ready(function() {
.....
    focusLeaving: function(){
                    e('#running');
                    $('.levelThree').on('mouseleave',function () {
                        e('remove');
                        MM.internalMenu.levelFive.close(function(){});
                        MM.internalMenu.levelThree.close($(this));
                        $(this).parent().removeClass('active');
                    });
                }
    //This outputs as expect: '#running'
....
});

然而,留下一个.levelThree什么也不会发生。如果我在控制台内运行上述代码,甚至通过控制台MM.internalMenu.levelThree.focusLeaving();运行函数本身,该函数就会相应地工作。

这让我很困惑,我知道它应该工作。我甚至知道它在运行,所以为什么它不能工作....

使用on函数意味着将事件绑定到回调处理程序。$('.levelThree').on('mouseleave',function () { .... }相当于说"从现在开始,当一个mouseleave事件在物品上被触发时,执行这个函数"。

函数本身不会在那个时间点执行,它只会在mouseleave事件发生时设置执行。

进一步解释:

<a id="my_link" href="#"> click me! </a>

当你点击这个,没有发生什么。假设您希望在单击它时显示You clicked me!。您需要使用on函数来设置它。

$("#my_link").on('click', function {
    alert("You clicked me!");
});

请注意,您仍然没有看到带有消息的警告框。您只需要设置在单击时显示的警告框。如果您点击链接,只有在您才会看到警告框。

需要注意的是,设置事件处理程序并不触发事件本身。但是,如果在控制台中运行该代码,它将直接执行。这就解释了为什么你的代码在控制台中运行时可以正常工作。

我假设focusLeaving是当鼠标离开项目时触发的事件?在这种情况下,修复这个问题的最简单方法是删除on函数,因为已经有一个事件触发并执行。您设置了两次,这就是导致您面临的问题的原因。

您是否在$(document).ready(function() { ... }中包装了脚本?在DOM准备好之后运行JS函数可能会使脚本再次工作,假设已经定义了MM

根据官方文件:

传递给.ready()的处理程序保证在DOM已经准备好了,所以这通常是附加所有其他属性的最佳位置事件处理程序和运行其他jQuery代码