尝试将点击事件附加到仅触发一次的

时间:2018-04-12 02:13:30

标签: javascript jquery

UPDATE结果显示代码实际正在工作,请参阅下面的答案

我在这里遇到了一些麻烦。我以为我在.one方法中找到了我的答案,但显然,。只意味着每一页都是每一页都不是我想要的。这就是我的意图:

$("#someID").one('mouseover', function() {

//do some stuff

});

$("#someOtherID").one('mouseover', function() {

//do some stuff

});

我的期望是,一旦第一个被解雇,该鼠标悬停事件将不再为该元素开火。

问题在于,一旦第一个发射,第二个也不会发射。因此.one方法似乎是在第一个元素触发后禁用ALL元素的所有鼠标悬停事件。

我没想到这一点,我希望.one只适用于第一个元素。这只是我对.one方法的理解中的一个缺陷,还是我的编码错误?

如果这只是我理解中的一个缺陷,有人能指出我正确的方向来纠正我的代码吗?

提前谢谢!

2 个答案:

答案 0 :(得分:0)

这很令人尴尬,我希望我不会因此而受到限制并再次阻止stackoverflow(最简单的事情就是阻止而且最难被阻止)。

首先,@ CertainPerformance,感谢您花时间看我的问题。我的真实代码没有你提到的两个错误,我更新了帖子以反映正确的语法。

我说实话,我的代码现在正在运行,我不知道为什么。我怀疑我一直处理一些让我感到沮丧的疯狂缓存问题,因为我使用的是inMotionHosting,它有非常好的评论,我在cPanel中禁用了缓存。

如果有的话,也许这个帖子会让搜索的人感兴趣"如何在javascript"中只发生一次事件。

答案 1 :(得分:0)

你可以像这样运行一次回调:

    // Extend the function prototype
    Function.prototype.once = function() {

        // Variables
        var func = this, // Current function
            result;

        // Returns the function
        return function() {

            // If function is set
            if(func) {

                // Executes the function
                result = func.apply(this, arguments);

                // Unset the function, so it will not be called again
                func = null;

            }

            // (:
            return result;

        };

    };

    // Bind the event to the function you will use as a callback
    $("#someID").on('mouseover', function() {

       console.log('just once');

    }.once());