Umar Aftab Umar Aftab - 7 months ago 20
Javascript Question

Changing the background color of an event in full calendar with right click - NOT WORKING

All the events in the full calendar are denoted by the class .fc-event and when I want to bind the right click functionality to .fc-event it does not work and the prevent default action from the JS does not trigger.
So what I did is that I replaced it with (document).bind and that does seem to trigger the right click contextmenu.
However, the main issue is that when I click red or green in the right click object it does trigger the alert. But the color does not change. I need assistance in changing the color of the event.

Regards,

I have created a custom menu in HTML :-

<ul class="custom-menu">
<li data-action="red" data-color="red">Red/Rouge</li>
<li data-action="green" data-color="green">Green/Verg</li>
</ul>


And the JS is as such, obviously I have taken assistance from different post but could not get the red color to show up.

$(document).bind("contextmenu", function (event) {

event.preventDefault();

$(".custom-menu").data('event', $(this)).finish().toggle(100).

css({
top: event.pageY + "px",
left: event.pageX + "px"
});
});

// If the document is clicked somewhere
$(document).bind("mousedown", function(e) {

if (!$(e.target).parents(".custom-menu").length > 0) {

$(".custom-menu").hide(100);
}
});

// If the menu element is clicked
$("ul.custom-menu li").click(function() {

//var $event = $(this).parent().data('event');

// var color = $(this).attr('data-color') || 'lightblue'; // Default to light blue

// $event.css('background-color', color);
switch($(this).attr("data-action")) {


case "red":

var $event = $(".fc-event").attr('data-color');
$event.css('background-color',red);
// alert("first"); break;

case "green":

// alert("second"); break;

}



$(".custom-menu").hide(100);
});


And the CSS is as follows:-

#red{
background-color: red;
}

#green{
background-color: green;
}

.red{
background-color: red;
}

.green{
background-color: green;
}

.custom-menu{
display:none;
z-index:1000;
position:absolute;
overflow:hidden;
border:1px solid #CCC;
white-space: nowrap;
font-family: sans-serif;
background: #fff;
color:#333;
border-radius: 5px;
padding:0;
}

.custom-menu li{
padding:8px 12px;
cursor:pointer;
list-style-type:none;
transition:all .3s ease;
}

.custom-menu li:hover{
background-color: #DEF;
}

Answer

It seems you got a bit confused? I've done some fixes to your code as I think it should be.

 // If the menu element is clicked
$("ul.custom-menu li").click(function() {

 // $event.css('background-color', color);
 switch($(this).attr("data-action")) {


    case "red": 

     // You're were getting the value of "data-color" and saving it into $event
     // also you were assigning variable red, not the string
     //var $event = $(".fc-event");
     $(this).css("background-color","red");
     //   alert("first"); break;

    case "green": 

  //  alert("second"); break;

 }
  $(".custom-menu").hide(100);
});