0

Having an issue with my to do list check boxes that are displayed from a php while loop. My JQuery seems to add css class to all my check boxes when i check one of them.

Php function:

function get_tasks(){
    $query = query("SELECT *  FROM tasks");

    confirm($query);

    while($row = fetch_array($query)){

        $task_name = $row['task_name'];
        $task_id = $row['task_id'];
        $task_desc =$row['task_description'];
        $date_created = $row['date_created'];

         $tasks = <<<DELIMETER

        <tr>
        <td><input type="checkbox" class="checkBoxes" name="checkBoxArray" value="{$task_id}"> </td>
        <td> <span class="task_name">{$task_name}</span> </td>
        <td> {$task_desc} </td>
        <td> {$date_created} </td>
        <td> <a href='javascript:void(0)' id="delete" class='btn btn-danger delete_link' rel='{$task_id}' ><span class='glyphicon glyphicon-remove'></span></a></td>   </td>

        </tr>


DELIMETER;

echo $tasks;


    }



}

JQuery code to interact with the check boxes.

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>

<script>
        $(document).ready(function(){  

       $('input:checkbox').change(function(){

          if($(this).is(":checked")){

              $('.task_name').addClass("completed"); //adds strike through to show task is completed.
              $('.delete_link').show();

          } else{

              $('.task_name').removeClass("completed");
              $('.delete_link').hide();



          }

       });

    });

    </script>

1 Answer 1

1

I understand that you only want to add/remove class and show/hide the delete link that are in the same row as the clicked checkbox...

$(document).ready(function(){  

    $('input:checkbox').change(function(){

        // Find the "parent tr" of the checkbox
        var parentTr = $(this).closest("tr");

        if($(this).is(":checked")){

            // find the elements to apply a change within the "parent tr"
            parentTr.find('.task_name').addClass("completed"); //adds strike through to show task is completed.
            parentTr.find('.delete_link').show();

        }else{

            // find the elements to apply a change within the "parent tr"
            parentTr.find('.task_name').removeClass("completed");
            parentTr.find('.delete_link').hide();
        }
    });

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

1 Comment

Thank you so much for your help! This is the solution that I was looking for :) It now works.

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.