Jquery错误的事件

时间:2013-09-18 19:53:18

标签: jquery events

所以我有一个有趣的问题。

我有这个HTML代码(原谅内联样式,它最适合网站):

<div id="videopage">
<div class="videoframe" source="http://www.youtube.com/embed/8Kb6xcyclPU?rel=0" style="float:left;width:135px;height:101px;border:5px solid #555;border-radius:5px;position:relative;background:#555555;">
<img style="position:absolute;cursor:pointer;" src="/wp-content/themes/casterconcepts/images/vid-thumbs/casters-and-wheels.jpg" /><div class="close" style="width: 40px;height: 40px;border-radius: 20px;background: #9b9b9b;opacity: 0.5;position: absolute;bottom: -20px;right: -20px;color: white;text-align: center;line-height: 38px;font-size: 35px;opacity:0;display:none;cursor:pointer;">&#10006;</div>
</div>
</div>

这个javascript代码:

$(function(){
  $("#videopage .videoframe").click(function(){
    var source = $(this).attr("source");
    $(this).children("img").animate({opacity:0},300)
    .parent().delay(500).animate({width:"400px",height:"300px"},500).append('<iframe style="opacity:0;" width="400" height="300" src="'+source+'" frameborder="0" allowfullscreen="" ></iframe>')
    .children("iframe").delay(1300).animate({opacity:1},500)
    .parent().children(".close").delay(1800).css("display","block").animate({opacity:0.5},300);
    alert("open event");
  });

  $("#videopage .close").hover(function(){
    $(this).stop().animate({opacity:0.8},150);
  },function(){
    $(this).stop().animate({opacity:0.5},150);
  });

  $("#videopage .close").click(function(){
    alert("close event");
    $(this).animate({opacity:0},{duration:300,complete:function(){
      $(this).css("display","none");
      }
    });
  });
});

jsFiddle Here

基本上,当你点击div时,视频会打开,一切都很好。 “第一”事件被解雇了。

问题是,当您单击关闭按钮并尝试触发“第二个”事件时,“第一个”事件也会被触发。

因此,当单击关闭按钮并触发选择器“#videopage .close”的jquery事件时,事件“#videopage .videoframe”也会被触发。

这不应该。单击关闭按钮时触发的唯一事件是“#videopage .close”。

任何想法为什么?

1 个答案:

答案 0 :(得分:2)

事件泡沫,除非你不让它们这样做。使用stopPropagation方法使点击事件不会冒泡到父级:

$("#videopage .close").click(function(e){
  e.stopPropagation();
  alert("close event");
  $(this).animate({opacity:0},{duration:300,complete:function(){
      $(this).css("display","none");
    }
  });
});