Я бы реорганизовал код, я думаю, это не очень хороший способ, я изменил код @Anthony Grist, чтобы вы могли сделать это с небольшим изменением:
http://jsfiddle.net/pxFcw/
Опция заключается в добавлении нового класса без удаления .nav_btn, или, если вы предпочитаете, вы можете использовать объект данных для хранения этой информации.
$('.nav_btn').on('click',function() {
if(!$(this).hasClass("ishidden"))
{
$('nav').animate({marginLeft: '-245'}, 500);
$(".nav_btn").addClass("ishidden");
}
else
{
$('nav').animate({marginLeft: '245'}, 500);
$(".nav_btn").removeClass("ishidden");
}
});
С объектом данных это будет выглядеть так:http://jsfiddle.net/dactivo/HjuFA/
$('.nav_btn').on('click',function() {
if(!$('.nav_btn').data("ishidden"))
{
$('nav').animate({marginLeft: '-245'}, 500);
$('.nav_btn').data("ishidden",true);
}
else
{
$('nav').animate({marginLeft: '245'}, 500);
$('.nav_btn').data("ishidden",false);
}
});
СТАРЫЙ ОТВЕТ 2
Хорошо, сейчас я знаю, почему это не работает, вы удаляете класс "nav_btn" и затем назначаетекласс "nav_btn2" для "объекта", который не существует (потому что вы удалили nav_btn).
Вы должны добавить класс nav_btn2, а затем удалить.
OLDER ANSWER 1: Только для версий Jquery <1.7, как прокомментировал @Anthony Grist. </strong>
Вы должны использовать прямое событие, чтобы связать событие для кнопок, которые не существуют, когда вы устанавливаете событие: http://api.jquery.com/live/
$('.nav_btn').live("click", function(){
...
});
$('.nav_btn2').live("click", function(){
...
});