3

我发现这段代码可以随机创建一些 div:

(function makeDiv(){
   var divsize = ((Math.random()*100) + 50).toFixed();
   var color = '#'+ Math.round(0xffffff * Math.random()).toString(16);
   $newdiv = $('<div/>').addClass("destruct").css({
       'width':divsize+'px',
       'height':divsize+'px',
       'background-color': color
   });

   var posx = (Math.random() * ($(document).width() - divsize)).toFixed();
   var posy = (Math.random() * ($(document).height() - divsize)).toFixed();

   $newdiv.css({
       'position':'absolute',
       'left':posx+'px',
       'top':posy+'px',
       'display':'none'
   }).appendTo( 'body' ).fadeIn(500, function(){
      makeDiv(); 
   }); 
})();

但我希望 div 在悬停时变成黑色,一个接一个。

$(document).ready(function() {
  $('.destruct').hover( function(){
    $('.destruct', this).css({background: '#000'});
   });
});

但它不起作用...

这是一个http://jsfiddle.net/q6L7C/2/

4

3 回答 3

4

演示

这是因为您的 div 是动态生成的,请尝试:

$(document).ready(function() {
   $(document).on('mouseover', '.destruct', function(){
      $(this).css({background: '#000'});
   });
});

如果您使用的是旧版本的 jquery (>1.7),请使用:

$(".destruct").live("mouseover", function(){
    $(this).css({background: '#000'});
}); 
于 2012-12-11T10:03:50.370 回答
1

有几种方法可以做到这一点。一是事件委托:

http://jsfiddle.net/q6L7C/3/

这会将绑定更改为:

$(document).on('hover', '.destruct', function(){
   $(this).css({background: '#000'});
});

...但我会尝试使用比document.

另一种解决方案是在创建每个 div 时将hover(或者mouseover在这种情况下,因为它应该足够了)回调单独绑定到每个 div,但这可能会导致很多单独的事件绑定。

于 2012-12-11T10:03:52.303 回答
1

您可以.mouseenter()在创建 div 时绑定,也可以.mouseenter()像其他答案指出的那样绑定到文档(事件委托)。我会用第一种方法。更新的演示

(function makeDiv(){
    var divsize = ((Math.random()*100) + 50).toFixed();
    var color = '#'+ Math.round(0xffffff * Math.random()).toString(16);
    $newdiv = $('<div/>').addClass("destruct").css({
        'width':divsize+'px',
        'height':divsize+'px',
        'background-color': color
    })
    // Magic happens here!
    .mouseenter(function(){
      $(this).css({background: '#000'});
    });

    var posx = (Math.random() * ($(document).width() - divsize)).toFixed();
    var posy = (Math.random() * ($(document).height() - divsize)).toFixed();

    $newdiv.css({
        'position':'absolute',
        'left':posx+'px',
        'top':posy+'px',
        'display':'none'
    }).appendTo( 'body' ).fadeIn(500, function(){
       makeDiv();
    });
})();
于 2012-12-11T10:07:13.100 回答