2017-01-18 72 views
3

假设我有一些填充了内容的大型DIV。将锚点标记内的可点击组件嵌套

的内容是动态的,它可以是任何东西,它可以包括不同类型的可点击的组件 - 按钮,视频,链接等

我需要的DIV自己是点击和路由的一些网址,但同时我需要不同类型的可点击组件才能使用。如果您按任意键,则不应调用DIV级别的路由。

我已经尝试不同的方法,似乎没有工作:

  1. 裹带的标签,整个DIV - 的DIV将路由到URL内的任何点击,并没有可点击组件会可用。此外,由于无法嵌套A标签,因此可以防止在该DIV中嵌入其他A标签。
  2. 向DIV添加一个onclick事件并进行相应的路由 - 这解决了A标签嵌套问题,但是再次没有可用的可点击组件。

,唯一合理的解决方案,我可以看到的是处理点击所有可点击的组件事件和对附加事件进行stopPropagation所以不会泡到DIV。

但是,这种解决方案是不可行的只是我作为内该div有可能是不属于我的控制之下组件,如与未知的内容和功能,视频控制等

I帧是否有不同的方法我可以使用我失踪?

更新:

我继续来管理不同组件的点击事件和stopPropegation。

在A标签上它的效果很好。

但是,当我有一个视频元素与不同的控制按钮,我试图把它包装在一个DIV和stopPropegation在该DIV,但它似乎并没有工作,不知道为什么。

更新2:

这越来越被分钟怪异......

所以我通过在包装DIV同时添加stopPropegation和解决的preventDefault视频元素的点击次数。我不知道为什么我需要使用preventDefault。没有意义。

现在我正面临与另一个组件不同的问题。我有一个Bootstrap旋转木马,我用DIV包装它,并试图在该DIV上的单击事件上停止播放,并尝试添加preventDefault。当我在该DIV上停止播放时,传送带按钮停止运行!?

一些帮助和解释,将不胜感激..

更新3:

我想我可以用defaultPrevented价值的事件,以找出是否对执行路由主DIV元素与否。

我用带有ui-sref属性的A标签包裹了我的主div(忘记提及这是一个Angular应用程序..),并绑定到ng-click事件。

但由于某种原因(似乎与ui-sref有关),jQuery的IsDefaultPrevented总是返回true。

因此,我用DIV替换了A标签,并在检查了IsDefaultPrevented值后执行了控制器内部的状态更改。

所以现在所有的工作。但我不确定为什么。

回答

0

看看我的代码;希望这能解决你的问题;

的HTML是考虑这样的:

<div id="div1" style="width:50px;height:50px;background-color:red"> 

     <a href="#">Hello</a> 

</div> 

JS代码是等;

$(document).ready(function(){ 

    $("#div1").click(function(){ 
     alert("on div1"); 
    }) 

    $("#div1 a").click(function(e){ 
     e.stopPropagation(); 
     alert("on div1 a"); 
    }) 
}) 

现在,如果你点击“你好”;只会显示“div1 a”警报。

+0

谢谢。这与我目前所做的相似。但是,停止传播混乱了我在第二次更新中描述的事情 –