2

在我输出我的标记之后我有这个运行(就在</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();那么函数就会相应地工作。

这让我很困惑,我知道它应该工作。我什至知道它正在运行,那为什么它不起作用....

4

2 回答 2

0

你把你的脚本包进去了$(document).ready(function() { ... }吗?通过在 DOM 准备好后运行 JS 函数可能会使您的脚本再次工作,假设MM已经定义。

根据官方文档

传递给 .ready() 的处理程序保证在 DOM 准备好后执行,因此这通常是附加所有其他事件处理程序并运行其他 jQuery 代码的最佳位置

于 2013-03-11T10:19:22.520 回答
0

使用该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函数,因为已经有一个事件触发和执行。您设置了两次,这就是导致您面临的问题的原因。

于 2013-03-11T12:44:51.790 回答