UPDATE结果显示代码实际正在工作,请参阅下面的答案
我在这里遇到了一些麻烦。我以为我在.one方法中找到了我的答案,但显然,。只意味着每一页都是每一页都不是我想要的。这就是我的意图:
$("#someID").one('mouseover', function() {
//do some stuff
});
$("#someOtherID").one('mouseover', function() {
//do some stuff
});
我的期望是,一旦第一个被解雇,该鼠标悬停事件将不再为该元素开火。
问题在于,一旦第一个发射,第二个也不会发射。因此.one方法似乎是在第一个元素触发后禁用ALL元素的所有鼠标悬停事件。
我没想到这一点,我希望.one只适用于第一个元素。这只是我对.one方法的理解中的一个缺陷,还是我的编码错误?
如果这只是我理解中的一个缺陷,有人能指出我正确的方向来纠正我的代码吗?
提前谢谢!
答案 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());