Search code examples
javascriptjqueryjquery-on

Changing from .live to .on


I know .live was depreciated and recently I was updating a page and realized I was using .live I would like to switch to .on but do not understand what to change. Here is my current code:

    //Script for Choosing which form to display
$("#email-button, #text-button").live('click',
function(){  

    //figure out what button was clicked. 
    if(this.id === "email-button"){
        var btnA = $(this);
        var btnB = $("#text-button");
        var divA = $('#email-form');
        var divB = $('#text-form');
    }
    else{
        btnA = $(this);
        btnB = $("#email-button");
        divA = $('#text-form');
        divB = $('#email-form');
    }

    //make sure it is not already active, no use to show/hide when it is already set
    if(btnA.hasClass('dark_button_span')){
        return; 
    }

    //see if div is visible, if so hide, than show first div
    if(divB.is(":visible")){        
        divB.fadeOut("slow", function(){
             divA.fadeIn("slow");
        });
    }
    else{//if already hidden, just show the first div
        divA.fadeIn("slow");            
    }

    //Add and remove classes to the buttons to switch state
    btnA.addClass('dark_button_span').removeClass('light_button_span');
    btnB.removeClass('dark_button_span').addClass('light_button_span');
  }    
);

I had assistance writing the above script and do not know what to change. Simply changing .live to .on doesn't work.

Any help would be greatly appreciated!

Thanks!


Solution

  • $(document).on('click', '#email-button, #text-button', function() {
        // Your code
    });
    

    Should do the trick. See http://api.jquery.com/live/ and http://api.jquery.com/on/.

    However, since you're using IDs, you probably don't even need .live() or delegating .on(). So the way I'd write that would be simply:

    function doButtons(btnA, btnB, divA, divB) {
        btnA = $(btnA); btnB = $(btnB); divA = $(divA); divB = $(divB);
    
        // Make sure it is not already active, no use to show/hide when it is already set
        if (btnA.hasClass('dark_button_span'))
            return; 
    
        // See if div is visible, if so hide, then show first div.
        if (divB.is(":visible")) {        
            divB.fadeOut("slow", function  (){
                divA.fadeIn("slow");
            });
        }
        else // If already hidden, just show the first div.
            divA.fadeIn("slow");
    
        // Add and remove classes to the buttons to switch state.
        btnA.addClass('dark_button_span').removeClass('light_button_span');
        btnB.removeClass('dark_button_span').addClass('light_button_span');
    }
    
    $('#email-button').click(function () {
         doButtons(this, '#text-button', '#email-form', '#text-form');
    });
    $('#text-button').click(function () {
        doButtons(this, '#email-button', '#text-form', '#email-form');
    });