0

I've this HTML:

$('.form-group-outer > label').find('> input:checkbox, > input:radio').on('click', function() {
    el = $(this).closest('.form-group').find('.sub-question');
    if(el.length > 0) { el.css('display', 'block'); }
    else {
        $('.sub-question').css('display', 'none');
        $('.sub-question :input[type="radio"], .sub-question :input[type="checkbox"]').each(function(index){
            $(this).prop('checked', false);
        });
    }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div data-step="1">
    <h3>Question 1:</h3>
    <div class="form-group form-group-outer">
        <label class="container_checkbox">I want bananas
            <input type="checkbox" name="q1[]" value="1" class="required">
            <span class="checkmark"></span>
        </label>
    </div>
    <div class="form-group form-group-outer">
        <label class="container_checkbox">I want pears
            <input type="checkbox" name="q1[]" value="2" class="required">
            <span class="checkmark"></span>
        </label>
    </div>
    <div class="form-group form-group-outer">
        <label class="container_checkbox">I want apples
            <input type="checkbox" name="q1[]" value="3" class="required">
            <span class="checkmark"></span>
        </label>
        <div class="row sub-question" style="display: none">
            <h3 class="col-12">What color do you want?</h3>
            <div class="form-group col-12">
                <label class="container_checkbox">Red
                    <input type="checkbox" name="q1_1[]" value="1" class="required">
                    <span class="checkmark"></span>
                </label>
            </div>
            <div class="form-group col-12">
                <label class="container_checkbox">Green
                    <input type="checkbox" name="q1_1[]" value="1" class="required">
                    <span class="checkmark"></span>
                </label>
            </div>
            <div class="form-group col-12">
                <label class="container_checkbox">Yellow
                    <input type="checkbox" name="q1_1[]" value="1" class="required">
                    <span class="checkmark"></span>
                </label>
            </div>
        </div>
    </div>
</div>

When I click on the third checkbox, it display a sub level of checkbox.

Problem is when I uncheck the 3rd checkbox, the sub level are not hide.

What's my problem please.

Here's the jsFiddle if needed: https://jsfiddle.net/a8rwqe9k/

Thanks.

2 Answers 2

1

I think you were over complicating it with the .css(). There are show() and hide() functions with jQuery that I've utilized in my answer. If you have any questions, feel free to follow up.

EDIT: The original question grew from the comments. Edits reflect desired changes.


$('.form-group-outer > label').find('> input:checkbox, > input:radio').on('click', function() {

    
  var qID = $(this).attr('name').replace("[]", "");
  var sID = qID.concat("_");
  var el = $(this).closest('.form-group').find('.sub-question');

  if ($(this).is(':checked')) {
      $('.sub-question.' + qID).hide();
    $('input[name^=' + sID + ']').prop('checked', false);
    el.show();
  } else {
    el.hide();
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div data-step="1">
    <h3>Question 1:</h3>
    <div class="form-group form-group-outer">
        <label class="container_radio">I want bananas
            <input type="radio" name="q1[]" value="1" class="required">
            <span class="checkmark"></span>
        </label>
    </div>
    <div class="form-group form-group-outer">
        <label class="container_radio">I want pears
            <input type="radio" name="q1[]" value="2" class="required">
            <span class="checkmark"></span>
        </label>
    </div>
    <div class="form-group form-group-outer">
        <label class="container_radio">I want apples
            <input type="radio" name="q1[]" value="3" class="required">
            <span class="checkmark"></span>
        </label>
        <div class="row sub-question q1" style="display: none">
            <h3 class="col-12">What color do you want?</h3>
            <div class="form-group col-12">
                <label class="container_radio">Red
                    <input type="radio" name="q1_1[]" class="required">
                    <span class="checkmark"></span>
                </label>
            </div>
            <div class="form-group col-12">
                <label class="container_radio">Green
                    <input type="radio" name="q1_2[]" class="required">
                    <span class="checkmark"></span>
                </label>
            </div>
            <div class="form-group col-12">
                <label class="container_radio">Yellow
                    <input type="radio" name="q1_3[]" class="required">
                    <span class="checkmark"></span>
                </label>
            </div>
        </div>
    </div>
</div>



<div data-step="1">
    <h3>Question 2:</h3>
    <div class="form-group form-group-outer">
        <label class="container_checkbox">I want bananas
            <input type="checkbox" name="q2[]" value="1" class="required">
            <span class="checkmark"></span>
        </label>
    </div>
    <div class="form-group form-group-outer">
        <label class="container_checkbox">I want pears
            <input type="checkbox" name="q2[]" value="2" class="required">
            <span class="checkmark"></span>
        </label>
    </div>
    <div class="form-group form-group-outer">
        <label class="container_checkbox">I want apples
            <input type="checkbox" name="q2[]" value="3" class="required">
            <span class="checkmark"></span>
        </label>
        <div class="row sub-question q2" style="display: none">
            <h3 class="col-12">What color do you want?</h3>
            <div class="form-group col-12">
                <label class="container_checkbox">Red
                    <input type="checkbox" name="q2_1[]" value="1" class="required">
                    <span class="checkmark"></span>
                </label>
            </div>
            <div class="form-group col-12">
                <label class="container_checkbox">Green
                    <input type="checkbox" name="q2_2[]" value="1" class="required">
                    <span class="checkmark"></span>
                </label>
            </div>
            <div class="form-group col-12">
                <label class="container_checkbox">Yellow
                    <input type="checkbox" name="q2_3[]" value="1" class="required">
                    <span class="checkmark"></span>
                </label>
            </div>
        </div>
    </div>
</div>

Sign up to request clarification or add additional context in comments.

5 Comments

Note...this does not work as expected because this is not clear checkboxes on close as OP has.
Ah sorry. Your code missing part if I uncheck third checkbox and check it again the sub-levels are populated from previous entry.
I also edited to include @daremachine's (excellent) point by including $('input[name="q1_1[]"]').prop('checked', false); which will clear the input box when the parent is deselected.
In your jsFiddle jsfiddle.net/un58pwe1, I think it's doesn't work at all. :)
There is some more things I need to look into. it's late so i will look after it tomorrow
0

The problem is you need to know if the sub-levels are hiddens or not.

Your condition should look like

if(el.length > 0 && el.is(':hidden')) { ...

also I suggest you change .css('display' for jQuery .show() and .hide() methods.

Don't use .css for display show/hide like that.

2 Comments

Thanks for your help. I think it doesn't work: jsfiddle.net/3y2p7gbz
@popol what not work? On third checkbox show/hide sub-levels working. What I missing?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.