try using following code, This is a prefered way jQuery
JS
$(".mark-as-complete").on("click", function(){
    $(this).addClass("completed);
});
$(".mark-as-complete").on("click", function(){ will trigger click function on span click
within that click function we are checking $(this) which will add class to clicked span.
The context of element is lost in ajax call. you can use context option in ajax to set any elements context:
context:this,
Ajax call snippet:
$.ajax({
   type: "post",
   context:this,
   url: "assets/js/ajax/mark-as-incomplete.php",
   data: { 'task': task },
   success: function() {
       $(this).removeClass("completed-task");
   }
});
You say you GENERATE the rows.
If you generate them on the client you need to delegate. Take the nearest static element to the generated rows, for example the table:
<table id="markTable">
then delegate like this:
$(function() {
  $("#markTable").on("click",".to-heal",function() {
    $(this).addClass("completed-task");
  });
  $("#markTable").on("click",".completed-task",function() {
    $(this).removeClass("completed-task");
  });
});
or just
$(function() {
  $("#markTable").on("click",".to-heal",function() {
    $(this).toggleClass("completed-task");
  });
});
UPDATE:
$(function() {
  $(".to-heal").on("click",function() {
    var task = $(this).attr("data-task");
    var completed = $(this).hasClass("completed-task");
    $.ajax({
      type: "post",
      context:this,
      url: "assets/js/ajax/mark-as-"+(completed?"in":"")+"complete.php",
      data: { 'task': task },
      success: function() {
        $(this).toggleClass("completed-task",!$(this).hasClass("completed-task"));
      }
    });
  });
});
or have ONE php that takes the parameter complete or incomplete
Try to use this
$('span').click(function(){
    $(this).addClass("completed");
});
When you use an selector it search for the selected class or id and it will apply the property to all the existed selectors.
Post a Comment for "Jquery Add Class To This Clicked Element"