first unbind click and then bind (jquery)

84,646

Solution 1

Looking at your question, you do not seem to bind back the click after you unbind it, so it will not fire. (Assuming you've kept the sequence of your functionality right). You'll have to do it this way:

//Set a function with the action you need to do after you click the train
function  trainClick() {
  alert('train is clicked');
  //do some stuff
}

When you're unbinding, call unbind with the function name:

$('#locations').click(function(){
 $('#train').unbind('click',trainClick);
//do some stuff
}

Then, to bind the click (when #close is clicked), you'd use :

$('.close').click(function(){
  $('#train').bind('click',trainClick);
  //do some stuff
}

NOTE :

A better way would be use on and off, if you are using a version greater than jQuery v1.7 because, well.. then it will not work. In the code above, just replace bind with on and unbind with off.

$('#train').on('click',trainClick);
$('#train').off('click',trainClick);

Hope this helps!

Solution 2

BINDING AND UNBINDING HANDLERS

The Key is Scope.

You must declare and define the function (trainClick(){stuff it does}) outside the event-handler so that the other buttons' functions can see it.

Below is an example.

function trainClick()
{
    alert("train is clicked"); //Notice this function is declared outside event handlers below
}
$('#button1').on("click", trainClick); //this calls the above function

$("#button2").on("click",function(){
    $("#button1").off("click",trainClick); //unbinds button1 from trainClick() function (event handler)
});//End Button 2 click

$("#button3").on("click",function(){
    $("#button1").on("click",trainClick); //binds button1 to trainClick() function (event handler)
});//End Button 2 click
Share:
84,646

Related videos on Youtube

Prithviraj Mitra
Author by

Prithviraj Mitra

Updated on June 26, 2020

Comments

  • Prithviraj Mitra
    Prithviraj Mitra almost 4 years

    1.I have a onclick event on,

    $('#locations').click(function(){
    $('#train').unbind('click'); 
    //do some stuff
    }
    

    2.Once the close button is clicked

    $('.close').click(function(){
    //do some stuff
    }
    

    3.Then again if I click #train

    $('#train').bind('click', function() {
    alert('train is clicked');
    //do some stuff
    }
    

    Now the problem is #train is not firing.Is it to bind the event again on .close function?

    Please suggest.Thanks in advance.

    • Ankit Jaiswal
      Ankit Jaiswal almost 11 years
      Do want to re-bind the #train element after the close button is clicked?
    • Omar
      Omar almost 11 years
      what version of jQuery are you using? use .on and .off instead of .bind.
    • Prithviraj Mitra
      Prithviraj Mitra almost 11 years
      Ankit yes that's what I want to do.So once the close button/id is clicked I can click #train again.
    • Prithviraj Mitra
      Prithviraj Mitra almost 11 years
      Omar I am using jquery-1.7.1
  • Prithviraj Mitra
    Prithviraj Mitra almost 11 years
    Thanks PC.Please give me sometime to test with it...will get back to you soon.
  • Prithviraj Mitra
    Prithviraj Mitra almost 11 years
    Brilliant!..Answer accepted...Thank you so much for your help.