2

I ahve an list with elements, which get the class 'added' if clicked. This element shall be transferred to the form. Therefore I have made a list of checkboxes, which have the same classes as the 'li' from the list.

I wrote a jQuery script, which shall check, if the 'li' is clicked (hasClass) and then the proper checkbox should have the attribute 'checked'. But it is not working properly. Don't know what I have made wrong...

HTML:

<div class="container">
                    <div class="row row-centered konf-wrapper-1">
                        <div class="col-md-4 label-wrap">
                            <h1 class="header-label">Konzeption</h1>
                            <ul class="li-wrap">
                                <li class="added haken">Kommunikationsstrategie</li>
                                <li class="0 hide-me add-btn point">Zielgruppendefinition</li>
                            </ul>
                        </div>

                        <div class="col-md-4 label-wrap">
                            <h1 class="header-label">Kommunikationsmaßnahmen</h1>
                            <ul class="li-wrap">
                                <li class="1 hide-me add-btn point">Namensfindung & Logoentwicklung</li>
                                <li class="2 hide-me add-btn point">Exposé</li>
                                <li class="3 hide-me add-btn point">Textdesign</li>
                                <li class="4 hide-me add-btn point">Anzeigenkampagnen</li>
                                <li class="5 hide-me add-btn point">Außenwerbung</li>
                                <li class="6 hide-me add-btn point">Bautafelgestaltung</li>
                            </ul>
                        </div>
                    </div>

                    <div class="row row-centered konf-wrapper-2 label-wrap">
                        <div class="col-md-4 label-wrap">
                            <h1 class="header-label">Online-Marketing</h1>
                            <ul class="li-wrap">
                                <li class="8 hide-me add-btn point">Website</li>
                                <li class="9 hide-me add-btn point">Social Media</li>
                                <li class="10 hide-me add-btn point">Digitale Präsentation</li>
                            </ul>
                        </div>

                        <div class="col-md-4 label-wrap">
                            <h1 class="header-label">Virtuelle Welten</h1>
                            <ul class="li-wrap">
                                <li class="11 hide-me add-btn point">Innenvisualisierung</li>
                                <li class="11 hide-me add-btn point">Außenvisualisierung</li>
                                <li class="12 hide-me add-btn point">Virtuelle Begehung</li>
                                <li class="13 hide-me add-btn point">Augmented Reality</li>
                            </ul>
                        </div>
                    </div>
                     <button type="button" class="btn btn-primary added-btn" title="Zur Übersicht." id="gesamt-weiter" >Zum Formular</button>



                 </div> 

Checkboxes:

<div class="">
      <ul class="checker-wrap">
      <li><input type="checkbox" id="0" value="Zielgruppendefinition" class="0 checker" name="checkbox-group[]"></li>
      <li><input type="checkbox" id="2" value="Exposé" class="2 checker" name="checkbox-group[]"></li>
      <li><input type="checkbox" id="3" value="Textdesign" class="3 checker" name="checkbox-group[]"></li>
      <li><input type="checkbox" id="4" value="Anzeigenkampagnen" class="4 checker" name="checkbox-group[]"></li>
      <li><input type="checkbox" id="5" value="Außenwerbung" class="5 checker" name="checkbox-group[]"></li>
      <li><input type="checkbox" id="6" value="Bautafelgestaltung" class="6 checker" name="checkbox-group[]"></li>
      <li><input type="checkbox" id="8" value="Website" class="8 checker" name="checkbox-group[]"></li>
      <li><input type="checkbox" id="9" value="Social Media" class="9 checker" name="checkbox-group[]"></li>
      <li><input type="checkbox" id="10" value="Digitale Präsentation" class="10 checker" name="checkbox-group[]"></li>
      <li><input type="checkbox" id="11" value="Visualisierungen" class="11 checker" name="checkbox-group[]"></li>
     <li><input type="checkbox" id="12" value="Virtuelle Begehung" class="12 checker" name="checkbox-group[]"></li>
     <li><input type="checkbox" id="13" value="Augmented Reality" class="13 checker" name="checkbox-group[]"></li>
    </ul>
    </div>

jQuery:

var $check = $(".checker-wrap");
$(".add-btn").click(function() {
        var $li = $(this).toggleClass("hide-me added haken");

        var li_class = $(this).attr('class').split(" ");
        var $wrap = $li.closest('.label-wrap');
        // trigger checkbox for form
        if (($li).hasClass("added")) {
            $check.find('.'+li_class[0]).addAttr('checked');
        } else {
            $check.find('.'+li_class[0]).removeAttr('checked');
        }

        $wrap.find('h1').toggleClass('top-added', $wrap.find('.added').length > 0);
        });

So the question is, what do I have to change, that the checkboxes get triggered if the li has the class added, and if not, the checkbox should be unchecked...

1 Answer 1

1

Use $check.find(class_check).prop('checked', 'checked'); instead of .addAttr()

var $check = $(".checker-wrap");
$(".add-btn").click(function() {
        var $li = $(this).toggleClass("hide-me added haken");

        var li_class = $(this).attr('class').split(" ");
        var $wrap = $li.closest('.label-wrap');
        // trigger checkbox for form
         $check.find('.'+li_class[0]).trigger('click');
        if (($li).hasClass("added")) {
        var class_check = '.' + li_class[0]; 
            $check.find(class_check).prop('checked', 'checked');
        } else {
            $check.find('.'+li_class[0]).prop('checked', false);
        }

        $wrap.find('h1').toggleClass('top-added', $wrap.find('.added').length > 0);
        });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
                    <div class="row row-centered konf-wrapper-1">
                        <div class="col-md-4 label-wrap">
                            <h1 class="header-label">Konzeption</h1>
                            <ul class="li-wrap">
                                <li class="added haken">Kommunikationsstrategie</li>
                                <li class="0 hide-me add-btn point">Zielgruppendefinition</li>
                            </ul>
                        </div>

                        <div class="col-md-4 label-wrap">
                            <h1 class="header-label">Kommunikationsmaßnahmen</h1>
                            <ul class="li-wrap">
                                <li class="1 hide-me add-btn point">Namensfindung & Logoentwicklung</li>
                                <li class="2 hide-me add-btn point">Exposé</li>
                                <li class="3 hide-me add-btn point">Textdesign</li>
                                <li class="4 hide-me add-btn point">Anzeigenkampagnen</li>
                                <li class="5 hide-me add-btn point">Außenwerbung</li>
                                <li class="6 hide-me add-btn point">Bautafelgestaltung</li>
                            </ul>
                        </div>
                    </div>

                    <div class="row row-centered konf-wrapper-2 label-wrap">
                        <div class="col-md-4 label-wrap">
                            <h1 class="header-label">Online-Marketing</h1>
                            <ul class="li-wrap">
                                <li class="8 hide-me add-btn point">Website</li>
                                <li class="9 hide-me add-btn point">Social Media</li>
                                <li class="10 hide-me add-btn point">Digitale Präsentation</li>
                            </ul>
                        </div>

                        <div class="col-md-4 label-wrap">
                            <h1 class="header-label">Virtuelle Welten</h1>
                            <ul class="li-wrap">
                                <li class="11 hide-me add-btn point">Innenvisualisierung</li>
                                <li class="11 hide-me add-btn point">Außenvisualisierung</li>
                                <li class="12 hide-me add-btn point">Virtuelle Begehung</li>
                                <li class="13 hide-me add-btn point">Augmented Reality</li>
                            </ul>
                        </div>
                    </div>
                     <button type="button" class="btn btn-primary added-btn" title="Zur Übersicht." id="gesamt-weiter" >Zum Formular</button>



                 </div> 



<div class="">
      <ul class="checker-wrap">
      <li><input type="checkbox" id="0" value="Zielgruppendefinition" class="0 checker" name="checkbox-group[]"></li>
      <li><input type="checkbox" id="2" value="Exposé" class="2 checker" name="checkbox-group[]"></li>
      <li><input type="checkbox" id="3" value="Textdesign" class="3 checker" name="checkbox-group[]"></li>
      <li><input type="checkbox" id="4" value="Anzeigenkampagnen" class="4 checker" name="checkbox-group[]"></li>
      <li><input type="checkbox" id="5" value="Außenwerbung" class="5 checker" name="checkbox-group[]"></li>
      <li><input type="checkbox" id="6" value="Bautafelgestaltung" class="6 checker" name="checkbox-group[]"></li>
      <li><input type="checkbox" id="8" value="Website" class="8 checker" name="checkbox-group[]"></li>
      <li><input type="checkbox" id="9" value="Social Media" class="9 checker" name="checkbox-group[]"></li>
      <li><input type="checkbox" id="10" value="Digitale Präsentation" class="10 checker" name="checkbox-group[]"></li>
      <li><input type="checkbox" id="11" value="Visualisierungen" class="11 checker" name="checkbox-group[]"></li>
     <li><input type="checkbox" id="12" value="Virtuelle Begehung" class="12 checker" name="checkbox-group[]"></li>
     <li><input type="checkbox" id="13" value="Augmented Reality" class="13 checker" name="checkbox-group[]"></li>
    </ul>
    </div>


<div class="">
      <ul class="checker-wrap">
      <li><input type="checkbox" id="0" value="Zielgruppendefinition" class="0 checker" name="checkbox-group[]"></li>
      <li><input type="checkbox" id="2" value="Exposé" class="2 checker" name="checkbox-group[]"></li>
      <li><input type="checkbox" id="3" value="Textdesign" class="3 checker" name="checkbox-group[]"></li>
      <li><input type="checkbox" id="4" value="Anzeigenkampagnen" class="4 checker" name="checkbox-group[]"></li>
      <li><input type="checkbox" id="5" value="Außenwerbung" class="5 checker" name="checkbox-group[]"></li>
      <li><input type="checkbox" id="6" value="Bautafelgestaltung" class="6 checker" name="checkbox-group[]"></li>
      <li><input type="checkbox" id="8" value="Website" class="8 checker" name="checkbox-group[]"></li>
      <li><input type="checkbox" id="9" value="Social Media" class="9 checker" name="checkbox-group[]"></li>
      <li><input type="checkbox" id="10" value="Digitale Präsentation" class="10 checker" name="checkbox-group[]"></li>
      <li><input type="checkbox" id="11" value="Visualisierungen" class="11 checker" name="checkbox-group[]"></li>
     <li><input type="checkbox" id="12" value="Virtuelle Begehung" class="12 checker" name="checkbox-group[]"></li>
     <li><input type="checkbox" id="13" value="Augmented Reality" class="13 checker" name="checkbox-group[]"></li>
    </ul>
    </div>

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

11 Comments

The snippet works, but not in my code. It shouldn't be a problem that the checkboxes are in a hidden div?
@Buntstiftmuffin U sure you included jquery in your code and wrote all jquery in $(document).ready(function())
Yes. I added the line $check.find('.'+li_class[0]).trigger('click'); before the if statement. Now it works.... So now it is triggered if clicked, and it checks if this has the class 'added'. If not it is unchecked. But somehow it is doubble triggered. Will this cause any problems?
@Buntstiftmuffin what is the need on .trigger('click') it should not be required. what is triggered twice.
the .trigger('click') is needed, otherwise the checkbox doesn't get checked. This is trigger number one. And var class_check = '.' + li_class[0]; $check.find(class_check).prop('checked', 'checked'); triggers it too, or doesn't it?
|

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.