【发布时间】:2025-11-24 21:00:01
【问题描述】:
我有一个页面,它有一个表单和一个生成的内容区域,它们都通过复选框隐藏了部分和子部分。 (复选框隐藏在页面上,但不在小提琴上显示复选框的“已选中”状态)
Here 是小提琴。它可能看起来很多,但坚持下去,它真的不是。我有一个应该很简单的问题,让我告诉你问题出在哪里。
我正在尝试向页面添加功能,以便当用户从左侧窗格中取消选择某个部分的所有子部分时,该部分作为一个整体隐藏在左侧,而右侧表单让您了解整个部分被隐藏(小提琴中的红色文本),但不允许更改小节以保持持久性。我可以通过在左侧窗格中单击它们来隐藏所有子部分,左侧部分消失,右侧子部分隐藏自己,通知您它的右侧标题隐藏在左侧。问题出在单击右侧标题以取消隐藏左侧部分时,子部分不再可见或“重置”。
这是处理检查是否所有小节都被隐藏的代码:
if (($('fieldset.abstract > div > input:checkbox:checked').length+1) == 7){
//Left Side
$('.block > .abstract > .superseven > section input').each(function(){
$(this).prop('checked' , true);
});
$('.block > .abstract > .superseven > section').eq(index).hide();
$('.block > .abstract').hide("slow");
//Right Side
$('fieldset.abstract label:first').toggleClass('hidden');
$('fieldset.abstract > div > input').each(function(){
$(this).prop('checked' , false);
});
$('fieldset.abstract > div > label').each(function(){
$(this).hide("slow");
});
如何将复选框“重置”为页面加载,只有在所有子部分都被隐藏之后?应该是一旦用户点击右边的section header,将section带回左边,所有的subsection都是可见的。
- 如果我在单击右侧部分标题时应用常规条件(类似于标记为
//Toggle Section completely的JS 中的下部),它不会从仅隐藏几个子部分然后隐藏整个部分时保持持久性。 - 我在想,如果我跟踪状态变量,但不知道 Jquery 中的变量作用域(我认为它必须是全局的,我认为这不是好的做法),这可能是可能的),
-
或者整个 Jquery 部分都可以封装在一个自调用函数中,如下所示:
(函数名() { ... })();
我可以使用任何其他编程方法吗?
抱歉,对于 js/jquery 的新手来说,这很深入,我希望小提琴会有所帮助,而不是伤害。
澄清应该发生的事情:
- 单击左侧的所有小节,它们就会消失
- 右侧的小节(仅限标签,因为所有复选框在实时页面中都不可见)应该消失
- 右侧部分标题应变为红色
- 单击右侧部分标题
- 应该出现左侧部分(所有这一切都在这里工作,这是它中断的地方)并且左侧的所有子部分都应该可见,就好像它被重置一样(与页面加载时相同,但仅针对此特定部分,因为这些部分有多个),因为用户隐藏了所有子部分,所以整个部分都被隐藏了,现在用户想要左侧部分,并且所有子部分都应该可见。李>
注意事项:
当前工作功能:
- 从标题中隐藏整个部分
- 隐藏除一个小节之外的所有小节
- 隐藏子部分,然后选择隐藏整个部分,并在取消隐藏整个部分时保持持久性
【问题讨论】:
-
嗨,我看到了小提琴,但问题是:当我取消选择左侧面板中的所有复选框时,整个左侧面板隐藏()(
if (($('fieldset.abstract > div > input:checkbox:checked').length+1) == 7){)。当我检查右侧面板上的 sectionheader 时,您希望左侧面板打开并且所有子部分都像在初始步骤中一样处于活动状态? -
查看说明,如果您需要更多信息,请告诉我
-
左侧部分隐藏在 JS
//Toggle Section completely注释下的代码中。我希望右侧面板部分标题的 .on(change) 打开左侧部分,仅当通过选择所有左侧子部分关闭该部分时才打开所有子部分。 -
好吧,我不确定是否是一个解决方案,但试试这部分,在:
//Currently off, turning On $('fieldset.abstract #abstract_all').on('change', function () {if (this.checked) {之后添加:if(!$('.block > .abstract').is(':visible')){ $('.superseven ').children().show();},是预期的效果吗? -
我必须这样做:` if(!$('.block > .abstract').is(':visible')) { $('fieldset.abstract #abstract_all').道具('检查',假); $('.superseven ').children().show(); $('fieldset.abstract > div > label').each(function() { $(this).removeClass('hidden'); }) } ` ,但是你是在正确的方向。检查它是否可见的好主意。 New fiddle。现在处理内联块以重新渲染。对代码块进行“重新渲染”调用或让它返回加载状态怎么样?
标签: javascript jquery html