It seems you are dynamically appending steps.
At the time of event binding the element must exist in the DOM.
If you have bound an event but then for example replace the DOM element with the event, the event is removed along with the DOM element and must be re-bound.
To not having to constantly re-bind you could bind the events using event delegation.
This will bind the event indirectly to the dynamic element through a static element.
Instead of this:
$("#step_2").click(function(e){ //... });
Use either on() with delegation or delegate(), depending on your jQuery version, similar to this:
// when using jQuery 1.7 or later
$("body").on("click", "#step_2", function(e){ //... });
// or when using jQuery 1.6 or earlier -- note the reversal of event and target
$("body").delegate("#step_2", "click", function(e){ //... });
Instead of body
you should use the closest static element which would be preferred.