81

I want to toggle between CSS so when a user clicks the button (#user_button) it shows the menu (#user_options) and changes the CSS, and when the user clicks it again it goes back to normal. So far this is all I have:

$('#user_button').click( function() {
    $('#user_options').toggle();
    $("#user_button").css({    
        borderBottomLeftRadius: '0px',
        borderBottomRightRadius: '0px'
    }); 
    return false;
});

Can anybody help?

Abhishek Pandey
  • 13,302
  • 8
  • 38
  • 68
Edd Turtle
  • 1,511
  • 1
  • 13
  • 24

8 Answers8

127

For jQuery versions lower than 1.9 (see https://api.jquery.com/toggle-event):

$('#user_button').toggle(function () {
    $("#user_button").css({borderBottomLeftRadius: "0px"});
}, function () {
    $("#user_button").css({borderBottomLeftRadius: "5px"});
});

Using classes in this case would be better than setting the css directly though, look at the addClass and removeClass methods alecwh mentioned.

$('#user_button').toggle(function () {
    $("#user_button").addClass("active");
}, function () {
    $("#user_button").removeClass("active");
});
Protector one
  • 6,926
  • 5
  • 62
  • 86
Ian Wetherbee
  • 6,009
  • 1
  • 29
  • 30
  • 7
    This no longer works as this method was deprecated in jQuery 1.8 and removed in jQuery 1.9. See http://api.jquery.com/toggle-event/ – binaryfunt Jul 28 '16 at 22:35
  • But what if we have transition effect? in this case transition effect won't be applied, right? – Pedram marandi Sep 06 '17 at 10:48
  • 1
    This way it just adds the d-none (the boostrap class) to my div element, so I use `$('#user_button').toggleClass('active');` whenever button is clicked. – LiLika Feb 06 '23 at 13:10
75

I would use the toggleClass function in jQuery and define the CSS to the class e.g.

/* start of css */
#user_button.active {
    border-bottom-right-radius: 5px;
    border-bottom-left-radius: 5px;
    -webkit-border-bottom-right-radius: 5px; /* user-agent specific */
    -webkit-border-bottom-left-radius: 5px;
    -moz-border-radius-bottomright: 5px;
    -moz-border-radius-bottomleft: 5px; /* etc... */
}
/* start of js */
$('#user_button').click(function() {
    $('#user_options').toggle();
    $(this).toggleClass('active');
    return false;
})
Ties
  • 5,726
  • 3
  • 28
  • 37
4

You might want to use jQuery's .addClass and .removeClass commands, and create two different classes for the states. This, to me, would be the best practice way of doing it.

alecwh
  • 984
  • 2
  • 10
  • 17
  • 4
    toggleClass is equivalent to these unless you want to remove a different class than you are adding for some reason – Zach Dec 14 '13 at 11:23
2

The initiale code must have borderBottomLeftRadius: 0px

$('#user_button').toggle().css('borderBottomLeftRadius','+5px');
Mohamed CHIBANI
  • 147
  • 1
  • 1
  • 6
1

The best option would be to set a class style in CSS like .showMenu and .hideMenu with the various styles inside. Then you can do something like

$("#user_button").addClass("showMenu"); 
Ken Redler
  • 23,863
  • 8
  • 57
  • 69
Munzilla
  • 3,805
  • 5
  • 31
  • 35
0

You can do this by maintaining the state as below:

$('#user_button').on('click',function(){
    if($(this).attr('data-click-state') == 1) {
        $(this).attr('data-click-state', 0);
        $(this).css('background-color', 'red')
      }
    else {
      $(this).attr('data-click-state', 1);
      $(this).css('background-color', 'orange')
    }
  });

Take a reference from the codepen example here

Austin
  • 97
  • 1
  • 6
Khem Raj Regmi
  • 2,130
  • 19
  • 21
-1
$(document).ready(function(){

    $('#toggle').active('click', function(){
        $(".navbar-collapse").addClass("show");
    });

    $('#toggle .active').on('click', function(){
        $(".navbar-collapse").removeClass("hide");
    });

});

The Toggle menu has been closed and opened but the Navigation item is not closed.

TrampolineTales
  • 808
  • 3
  • 14
  • 31
-1
$('#user_button').on('click', function() {
  $("#user_button").toggleClass('active');
});
#user_option.active {
  border-bottom-right-radius: 5px;
  border-bottom-left-radius: 5px;
}
Tyler2P
  • 2,324
  • 26
  • 22
  • 31
XkriPt
  • 1