2016-05-01 43 views
3

我有我的网站的一些元素,我想这样做此代码:点击按钮时,用户点击父DIV

当用户点击一个div,触发内格按钮点击(在此情况下,这些按钮打开一个模式),这在我做一个window.location页面的其他地方工作,而不是一个触发器。这段代码有什么不好?我不知道它:(

对不起我的英语水平,得益于

jQuery(".hover-content").click(function(e){ 
     var hl = jQuery(this); 
     jQuery(this).find("button").each(function(){ 
      if(jQuery(this).is(":visible")){ 
       jQuery(this).trigger("click"); 
      } 
     }); 
    }); 

控制台显示此错误:

Uncaught RangeError: Maximum call stack size exceeded

小例子: https://jsfiddle.net/z0704nss/

+0

可以提供[的jsfiddle(https://jsfiddle.net/)为例来进行这项工作? –

+0

试试.click();而不是.trigger(“click”); –

+0

是的,问题不是触发器或点击功能,我得到这个错误: 未捕获RangeError:超过最大调用堆栈大小 我们有9个div在页面中有2个按钮,我不认为这应该是一个堆栈问题:S – Genaut

回答

3

这是因为在Javascript event bubbling
我能够复制和解决它通过使用添加e.stopPropagation()到你的一段代码。

$(".hover-content").click(function(e){ 
 
    e.preventDefault(); 
 
    console.log('hi') 
 
    e.stopPropagation(); 
 
    $(this).find("button").each(function(){ 
 
     if($(this).is(":visible")){ 
 
      $(this).trigger("click"); 
 
     } 
 
    }); 
 
}); 
 

 
$('.button-ex').click(function(e){ 
 
    e.preventDefault(); 
 
    e.stopPropagation(); 
 
    console.log('clicked button') 
 
})
body { 
 
    background-color: #eef; 
 
    padding: 5px; 
 
} 
 
.hover-content{ 
 
    background-color:#FF0000 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div class="hover-content"> 
 
    <button id="btnOne" class="button-ex">demo1</button> 
 
    <button id="btnTwo" class="button-ex">demo2</button> 
 
</div>

+0

https://jsfiddle.net/9jq73ecf/这个怎么样?如果你有9个div与这些内容。所有按钮都执行。这个例子看起来像我有的代码︰https://jsfiddle.net/z0704nss/(和相同的错误) – Genaut

+0

修复它。请检查这一点。 https://jsfiddle.net/9jq73ecf/1/ –

+0

它解决了你的问题吗? –