根据先前复选框的状态重置复选框以加载页面状态

时间:2012-07-12 05:38:01

标签: javascript jquery html

我有一个页面,其中包含一个表单和一个生成的内容区域,它们都通过复选框隐藏了部分和子部分。 (复选框隐藏在页面上,但不是在小提琴上显示复选框的“已检查”状态)

Here是小提琴。它可能看起来很多,但挂在那里,它真的不是。我有一个简单的问题,让我告诉你问题所在。

我正在尝试向页面添加功能,以便当用户从左侧窗格中取消选择某个部分的所有子部分时,该部分作为一个整体隐藏在左侧,而右侧的表单让您知道整个部分部分被隐藏(小提琴中的RED文本),但不允许子部分更改以保持持久性。我可以通过在左窗格中单击它们来隐藏所有子部分,左侧部分消失,右侧子部分隐藏自己,右侧标题通知您它隐藏在左侧。问题在于,单击右侧标题以取消隐藏左侧的部分,子部分不再可见或“重置”。

以下是处理检查是否隐藏所有子部分的代码:

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");
    });

如果隐藏了所有子部分后,如何“重置”页面加载的复选框?应该是,一旦用户单击右侧部分标题以使该部分返回左侧,所有子部分都可见。

  • 如果我在单击右侧部分标题时应用常规条件(类似于标记为//Toggle Section completely的JS中的较低部分),则只有隐藏了几个子部分才会保持持久性,然后整个部分。
  • 我认为如果我跟踪一个状态变量可能是可能的,但是不知道Jquery中的变量范围(我会认为它必须是全局的,我认为这是不好的做法),
  • 或者Jquery的整个部分都可以包含在这样的自调用函数中:

    (function name(){...})();

我可以使用其他任何编程方法吗?

对于深度,js / jquery的新手,我很抱歉,我希望小提琴有帮助,而不是伤害。

澄清应该发生什么:

  • 单击所有左侧子部分,它们将消失
  • 右侧小节(仅限标签,因为所有复选框在实际网页中都不可见)应该消失
  • 右侧部分标题应变为红色
  • 点击右侧部分标题
  • 应该出现左侧部分(所有这些都在这里工作,这里是它打破的地方)并且左边的所有子部分应该是可见的,就像它被重置一样(与页面加载时相同,但是因为用户隐藏了所有子部分,所以只有这个特定部分,因为用户隐藏了所有子部分,所以整个部分都被隐藏了,现在用户想要返回左部分,并且所有子部分都应该是可见的。

注意:

当前的工作功能:

  • 隐藏标题中的整个部分
  • 隐藏除一个小节外的所有小节
  • 隐藏子部分,然后选择隐藏整个部分,并在取消隐藏整个部分时保持持久性

1 个答案:

答案 0 :(得分:1)

对于初始块的问题,我认为是宽度问题,尝试更改一些宽度,尝试14.28而不是14.326647564469914,(我通过IPad响应并使用此设备正常工作)

要对注释求和,此代码:重置初始大小写并设置子节的正确宽度

if(!$('.block > .abstract').is(':visible')) {
      $('fieldset.abstract #abstract_all').prop('checked' , false);
      $('.superseven ').children().show();
      var width = ((1/7)*100);
      $('.superseven ').find('div').css("width", width + '%')