jQuery:在mouseleave上杀死Mouseenter / mouseleave函数

时间:2014-05-20 21:06:29

标签: javascript jquery

我对mouseenter / mouseleave功能有一些问题。

请查看我的代码;

$(".elms").live(
{
    mouseenter: function (e) 
    {
        $("a").click(function()
        {
            alert('test');
        });
    },
    mouseleave: function (e) 
    {
        //do something else
    }
});

html:

<div class='elms'>test [ function says `test` ]</div>
<div class='elms'>test [ function says `test` and `test` ]</div>
<div class='elms'>test [ function says `test` and `test` and `test` ]</div>
<div class='elms'>test [ function says `test` and `test` and `test `test` and `test` ]</div>

这将重复甚至90个元素,我想在休假时杀死函数并创建新函数。像这样:

var killIt = $(".elms").live(
{
    mouseenter: function (e) 
    {
        $("a").click(function()
        {
            alert('test');
        });
    },
    mouseleave: function (e) 
    {
        killIt.die();
    }
});

有什么想法吗?

[小提琴:http://jsfiddle.net/29f3P/]

2 个答案:

答案 0 :(得分:1)

我不确定这是你想要的,在这种情况下,每次将鼠标悬停在.elms元素上时都会添加一个监听器。如果你真的想在每次鼠标悬停时添加一个监听器而你不希望你看到的重复行为可以使用bind和unbind来设置鼠标事件,如here:所述

$(".elms").live({
        mouseenter: function (e) {
             $("a").bind("click", function(){
                  alert('test');
             });

        },
        mouseleave: function (e) {
             $("a").unbind("click");

        }

});

我修改了你的小提琴here:

答案 1 :(得分:0)

如果每次都必须销毁监听器,请尝试jQuery.one(),这将在第一次调用后自动销毁监听器。

http://api.jquery.com/one/

如果侦听器不一定运行一次,请尝试使用jQuery.off()取消绑定侦听器。

http://api.jquery.com/off/