如果您必须使用绑定到一组元素的点击事件,您还需要检查选中状态,类似于以下内容:
$('.carouselGlobal').click(function(){
var $this = $(this);
var theId = this.id;
if (theId === "carousel"){
if($this.is(":checked")){
$('.sectionCarousel').show();
} else {
$('.sectionCarousel').hide();
}
}
});
演示- 添加状态检查
编辑
在我提交表单之前,您的代码一直有效,之后仍然单击复选框,但部分 div 被隐藏,而它不应该被隐藏。
您可以通过分隔类似于此的代码来解决此问题:
var setSectionCarouselState = function (showIt) {
if (showIt) {
$('.sectionCarousel').show();
} else {
$('.sectionCarousel').hide();
}
}
$('.carouselGlobal').click(function () {
var $this = $(this);
var theId = this.id;
if (theId === "carousel") {
setSectionCarouselState($this.is(":checked"));
}
});
setSectionCarouselState($('#carousel').is(":checked"));
演示- 分离代码
上面的代码不适用于复制粘贴,因为它可以在一个孤立的环境中工作,jsFiddle
但可能需要进行一些小的调整才能使其在您的特定环境中工作。
编辑
如果我有 6 或 7 个这些,明显不同的 id 和类是否有一种简单的方法来处理它们,或者我会为每一个写出类似于这个答案的东西?
我不是 100% 确定您的设置如何,但假设您有多个checkboxes
,每个显示/隐藏 1 对 1 的另一个元素或选择器。您可以编写更通用的解决方案。
一种选择是使用一种data-attribute
方法,在这种方法中,您分配每个checkbox
选择器它应该起作用。这也会使id
属性的使用变得多余。
假设你有类似这样的 HTML:
<input type="checkbox" class="carouselGlobal">
<input type="checkbox" class="carouselGlobal" data-target-selector=".anotherSectionCarousel">
<input type="checkbox" class="carouselGlobal" data-target-selector=".sectionCarousel" checked>
<div class="sectionCarousel" style="display:none;">section carousel</div>
<div class="anotherSectionCarousel" style="display:none;">another section carousel</div>
正如您在上面看到的,每个checkbox
都有一个data-target-selector
属性,其中包含它应该影响的元素的选择器。
您的脚本现在变得非常小:
// method which takes in the DOM reference of a checkbox
// interrogates the data attribute and uses it
// to show/hide the matching element
var setTargetState = function (checkbox) {
var $this = $(checkbox);
var $target = $($this.attr('data-target-selector'));
if(!$target.length){
return;
}
if ($this.is(":checked")) {
$target.show();
} else {
$target.hide();
}
}
// click event drastically simplified
$('.carouselGlobal').click(function () {
setTargetState(this);
});
// iterates through all checkboxes ensureing the initial state is applied
$('.carouselGlobal').each(function(){
setTargetState(this);
});
DEMO - 例如使用数据属性