2015-12-21 60 views
1
(function() { 
var bgOn; 
$(".ContainingBox").on('hover', function() { 
    function() { 
    bgOn = $(this).css("background-color"); 
      $(this).css("background-color", "#e5fff8"); 
     }, function() { 
     $(this).css("background-color", bgOn); 
     } 
}); 
})(); 

我想绑定悬停事件。当我没有将它包装在匿名函数中时,此代码工作正常,并使用.hover()。但是,我们有要求不使用全局变量。所以我需要绑定事件!jquery没有绑定事件onload

这不可能吗?

+0

没有'hover'事件,jQuery的确实在某些时候创建怪'悬停()'方法,但你要找什么是真正的'mouseenter'和'mouseleave'。 – adeneo

+0

只是为了记录,您的标题是误导性的。有一个叫'onload'的事件,你说的是jQuery没有绑定那个事件。你的意思是它没有绑定*一个*事件*当页面加载时*即页面的'on(空间)加载'(暗示)* * –

回答

3

你的代码有语法错误,特别是on()不接受多个回调等
此外,没有提供原生hover事件,你应该使用mouseentermouseleave代替

$(".ContainingBox").on({ 
    mouseenter: function() { 
     $(this).data('bg', $(this).css("background-color")); 
     $(this).css("background-color", "#e5fff8"); 
    }, 
    mouseleave: function() { 
     $(this).css("background-color", $(this).data('bg')); 
    } 
}); 

使用jQuery的data(),而不是一个变量,将记住每个el的背景颜色EMENT

FIDDLE

+0

美丽的解决方案 –

+0

使用.data,技术上是一个全局变量,但? –

+0

@christopherclark - 不,它在技术上不是全局变量,因为数据存储在全局'window.jQuery'下的某个对象中。 – adeneo

0

试试这个....

(function() { 
     var bgOn; 
     $(".ContainingBox").on('mouseover', function() { 
      function() { 
      bgOn = $(this).css("background-color"); 
      $(this).css("background-color", "#e5fff8"); 
      }, function() { 
       $(this).css("background-color", bgOn); 
      } 
     }); 
})(); 
+0

这是很多功能和错误。 – adeneo

+0

这是一个比答案更多的评论,更不用说它已经被说 –