我有一个小脚本,如果按下相应的按钮,应显示隐藏的div。例如,如果单击按钮第一个按钮,则应显示div第一个按钮内容。现在,当我点击按钮时,Chrome崩溃并且div没有显示。
这是html:
<div class="home-middle-buttons">
<div class="first-button">
<span>I’m an In-House Marketer</span>
</div>
<div class="second-button">
<span>I Work at an Agency</span>
</div>
<div class="third-button">
<span>I’m a Business Owner</span>
</div>
</div>
<div class="home-middle-content">
<div class="first-button-content">
<p>Lorem ipsum dolor</p>
</div>
<div class="second-button-content">
<p>Lorem ipsum dolor</p>
</div>
<div class="third-button-content">
<p>Lorem ipsum dolor.</p>
</div>
</div>
这是脚本:
jQuery(document).ready(function() {
jQuery(".home-middle-buttons div").click(function() {
if (jQuery(".first-button").click()) {
jQuery(".first-button-content").css( 'display', 'block' );
} else {
jQuery(".second-button-content").css( 'display', 'block' );
}
});
});
答案 0 :(得分:6)
你的问题就在这一行:
if (jQuery(".first-button").click()) {
调用.click()
实际触发点击事件,它不会测试是否发生了点击。那么接着调用你的点击处理程序,它会到达那一行并触发一个调用处理程序等的点击。
试试这个:
if (jQuery(this).hasClass("first-button")) {
在你的点击处理程序中,this
指的是被点击的特定按钮,jQuery的.hasClass()
返回一个布尔值,表示该元素是否具有该类。
但是设置整个事情的更好方法如下:
<div class="home-middle-buttons">
<div data-associated-content="first-button-content">
<span>I’m an In-House Marketer</span>
</div>
<div data-associated-content="second-button-content">
<span>I Work at an Agency</span>
</div>
<div data-associated-content="third-button-content">
<span>I’m a Business Owner</span>
</div>
</div>
<div class="home-middle-content">
<!-- as in the question -->
</div>
有了这个JS:
jQuery(document).ready(function() {
jQuery(".home-middle-buttons div").click(function() {
var associatedDiv = jQuery(this).attr("data-associated-content");
jQuery("." + associatedDiv).show();
});
});
注意:如果data-associated-content
似乎有点长,可以随意使用data-something-shorter
。此外,您的内容div上的类似乎唯一地标识了这些div,因此我建议将它们设为id
而不是class
更合乎逻辑。
答案 1 :(得分:5)
因为你有一种递归函数调用,所以这一行是有问题的:
if (jQuery(".first-button").click()) {
它称之为:
jQuery(".home-middle-buttons div").click(function() {
然后再次调用第一个,所以它是递归的
答案 2 :(得分:2)
jQuery(".first-button").click()
现在,这不是你获得点击元素的方式。相反,它是.trigger("click")
的快捷方式 - 您通常会一次又一次地触发事件处理程序来创建无限循环。
相反,您要测试当前元素 - this
- 是否is第一个按钮:
$(this).is(".first-button")
您也可以使用hasClass
method。