两个 jQuery 切换不起作用
Two jQuery toggles not working
谁能告诉我为什么这个愚蠢的代码不能在我的网站上运行?是我疯了,还是有冲突?
<div class="row faqbody question">
<div class="col-lg-12">
<div class="row">
<div class="col-lg-12">
<button class="question">
<h5>
Do I get to pick which chef makes my pie?
<i class="fa fa-caret-up"></i>
</h5>
</button>
</div>
</div>
<div class="row answer">
<div class="col-lg-12">
<p>Nope....</p>
</div>
</div>
</div>
</div>
$('.question').click( function() {
console.log('Question Clicked');
if ($(this).find('.fa').hasClass('fa-caret-up')) {
console.log('Has Fa-caret-up');
$(this).find('.fa').removeClass('fa-caret-up');
$(this).find('.fa').addClass('fa-caret-down');
}
if ($(this).find('.fa').hasClass('fa-caret-down')) {
console.log('Has Fa-caret-down');
$(this).find('.fa').removeClass('fa-caret-down');
$(this).find('.fa').addClass('fa-caret-up');
}
$(this).parent('div').parent('div').next('.answer').toggleClass('hidden');
});
答案显示没有问题,插入符号以如此时髦的方式编码的原因是因为以下不起作用:
$( this ).find('.fa').toggleClass('fa-caret-up fa-caret-down');
我以前从未见过这个。通常像这样简单的东西不是问题。
提前谢谢你,我希望这是一个简单的!
您正在将点击侦听器绑定到 .question
。您有一个带有 class 的按钮,位于带有 class 的 div 中。您的事件分派两次(每个对象一次),因此切换被取消。您可以在控制台中看到它 - 您的所有日志条目都加倍了。
请参阅下面的代码片段,修复基本上只是让您的选择器更加明确:
变化:
$('.question').click(...);
收件人:
$('button.question').click(...)
PS... 这个片段在没有 FontAwesome 的情况下运行,所以我只是在你的 <i>
标签和一些样式中添加了一个 X
这样你就可以看到它发生变化并且 classes 被正确分配。
$('button.question').click( function() {
console.log('Question Clicked');
$(this).find('.fa').toggleClass('fa-caret-up').toggleClass('fa-caret-down');
$(this).parent('div').parent('div').next('.answer').toggleClass('hidden');
});
i.fa.fa-caret-up {
color: red;
}
i.fa.fa-caret-down {
color: blue;
}
.hidden {
display:none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="row faqbody question">
<div class="col-lg-12">
<div class="row">
<div class="col-lg-12">
<button class="question"><h5>Do I get to pick which chef makes my pie? <i class="fa fa-caret-up">X</i></h5></button>
</div>
</div>
<div class="row answer hidden">
<div class="col-lg-12">
<p>Nope....</p>
</div>
</div>
</div>
</div>
谁能告诉我为什么这个愚蠢的代码不能在我的网站上运行?是我疯了,还是有冲突?
<div class="row faqbody question">
<div class="col-lg-12">
<div class="row">
<div class="col-lg-12">
<button class="question">
<h5>
Do I get to pick which chef makes my pie?
<i class="fa fa-caret-up"></i>
</h5>
</button>
</div>
</div>
<div class="row answer">
<div class="col-lg-12">
<p>Nope....</p>
</div>
</div>
</div>
</div>
$('.question').click( function() {
console.log('Question Clicked');
if ($(this).find('.fa').hasClass('fa-caret-up')) {
console.log('Has Fa-caret-up');
$(this).find('.fa').removeClass('fa-caret-up');
$(this).find('.fa').addClass('fa-caret-down');
}
if ($(this).find('.fa').hasClass('fa-caret-down')) {
console.log('Has Fa-caret-down');
$(this).find('.fa').removeClass('fa-caret-down');
$(this).find('.fa').addClass('fa-caret-up');
}
$(this).parent('div').parent('div').next('.answer').toggleClass('hidden');
});
答案显示没有问题,插入符号以如此时髦的方式编码的原因是因为以下不起作用:
$( this ).find('.fa').toggleClass('fa-caret-up fa-caret-down');
我以前从未见过这个。通常像这样简单的东西不是问题。
提前谢谢你,我希望这是一个简单的!
您正在将点击侦听器绑定到 .question
。您有一个带有 class 的按钮,位于带有 class 的 div 中。您的事件分派两次(每个对象一次),因此切换被取消。您可以在控制台中看到它 - 您的所有日志条目都加倍了。
请参阅下面的代码片段,修复基本上只是让您的选择器更加明确:
变化:
$('.question').click(...);
收件人:
$('button.question').click(...)
PS... 这个片段在没有 FontAwesome 的情况下运行,所以我只是在你的 <i>
标签和一些样式中添加了一个 X
这样你就可以看到它发生变化并且 classes 被正确分配。
$('button.question').click( function() {
console.log('Question Clicked');
$(this).find('.fa').toggleClass('fa-caret-up').toggleClass('fa-caret-down');
$(this).parent('div').parent('div').next('.answer').toggleClass('hidden');
});
i.fa.fa-caret-up {
color: red;
}
i.fa.fa-caret-down {
color: blue;
}
.hidden {
display:none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="row faqbody question">
<div class="col-lg-12">
<div class="row">
<div class="col-lg-12">
<button class="question"><h5>Do I get to pick which chef makes my pie? <i class="fa fa-caret-up">X</i></h5></button>
</div>
</div>
<div class="row answer hidden">
<div class="col-lg-12">
<p>Nope....</p>
</div>
</div>
</div>
</div>