繁体   English   中英

尝试将点击事件附加到只会触发一次的ID

[英]trying to attach a click event to an id that only fires once

UPDATE证明代码实际上正在工作,请参阅下面的答案

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

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

//do some stuff

});

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

//do some stuff

});

我的期望是,一旦第一个事件触发,该鼠标悬停事件将不再为那个元素触发。

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

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

如果这只是我的理解上的缺陷,那么有人可以指出正确的方向来纠正我的代码吗?

先感谢您!

这真是令人尴尬,我希望我不会为此而感到厌烦并再次阻止其堆栈溢出(有史以来最容易被阻止并且最难被阻止的事情)。

首先,@ CertainPerformance,感谢您抽出宝贵时间来查看我的问题。 我的实际代码没有您提到的两个错误,我更新了我的文章以反映正确的语法。

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

如果有的话,也许这个线程会有益于搜索“如何使事件仅在javascript中触发一次”的人。

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

    // 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());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM