Добрый вечер.
У меня на сайте есть кнопка c id="search". После нажатия на нее отправляется AJAX запрос на добавление юзера в таблицу ожидающих, и value меняется на "Отменить заявку".
Во время обновления страницы запускается AJAX запрос на проверку значения этой кнопки.
Сервер возвращает одно из трех значений:
yes - пользователь стоит в очереди, value кнопки должно быть "Отменить заявку". При нажатии на кнопку должен отправляться запрос на удаление из очереди. При повторном нажатии - добавление.
no - пользователя нет в очереди. Value - "Найти собеседника". Первое нажатие - добавить заявку, второе - удалить.
yes:disabled - пользователь есть в списках, и уже общается. Кнопка должны принять атрибут disabled. Появляется окно с чатом.
В этом самом окне с чатом есть кнопка "Закрыть окно". По кнопке запускается функция exitRoom. Функция скрывает окно с чатом, убирает атрибут disabled, а так же по новой выставляет события для кнопки "search".
Проблема заключается вот в чем: иногда, после закрытия чата", события для кнопки "search" не обновляются, и происходит какая то чертовщина.
Код js файла:
var button = null;
$(document).ready(function(){
button = $("#search");
checkButton();
$('#exitRoom').bind('click', exitRoom);
});
function checkButton(){
$.post('interlocutor/checkButton',
{flag: "check"},
function(result){
if (result == "yes"){
button.attr('value','Отменить заявку');
checkInterlocutorID = setInterval(checkInterlocutor, 2000);
button.toggle(deleteInterlocutor, addInterlocutor);
}
else if (result == "no"){
button.attr('value','Найти собеседника');
button.toggle(addInterlocutor, deleteInterlocutor);
}
else if (result == "yes:disabled"){
button.attr('value','Отменить заявку');
button.attr('disabled','disabled');
checkInterlocutorID = setInterval(checkInterlocutor, 2000);
}
});
}
var checkInterlocutorID;
var load_message;
function addInterlocutor(){
$.post('/interlocutor/add',
{flag: "record"},
function(result){
if (result == "add_ok"){
checkInterlocutorID = setInterval(checkInterlocutor, 2000);
button.attr('value','Отменить заявку');
}
});
}
function deleteInterlocutor(){
$.post('/interlocutor/delete',
{flag: "delete"},
function(result){
if (result == "delete_ok"){
clearInterval(checkInterlocutorID);
button.attr('value','Найти собеседника');
}
}
);
}
function checkInterlocutor(){
$.post('/interlocutor/checkInterlocutor',
{flag: "check_interlocutor"},
function(result){
if (result == "start_room"){
$('#room').fadeIn(1000);
button.attr('value','Отменить заявку');
button.attr('disabled','disabled');
clearInterval(checkInterlocutorID);
load_message = setInterval(Load, 2000);
}
});
}
function exitRoom(){
$.post("/room/exitroom",
{flag: "exit_room"},
function(result){
if (result == "ok"){
clearInterval(load_message);
setTimeout("$('#search').removeAttr('disabled','disabled')", 1000);
$('#room').fadeOut(1000, checkButton);
}
}
);
}
P.S. Прошу строго не судить, программированием начал заниматься совсем недавно. Адекватная и обоснованная критика приветствуется.