Запрет js кода, пока не закончиться предыдущий.
Здравствуйте, есть у меня поле для ввода текста, кнопка для отправки содержимого и еще есть блок с выводом ошибки.
В этот блок заноситься текст ошибки, например: Пользователь не ввел текст и нажал на кнопку отправить -- в блоке ошибок появиться текст: "Нельзя отправлять пустое сообщение". Все работает на ура, но только вот если пользователь нажмет больше одного раза на кнопку, при это не введя нечего в поле отправки (то есть попытается отправить пустое сообщение), то ошибка будет появляться несколько раз подрят одна после одной. Вопрос: Как избавиться от повторного "проигрывания" js кода пока не закончиться предыдущий? Вот как в js у меня выводит текст ошибки: $("#error_mes_box").text(resultStat).show().delay(5500).slideToggle("fast"); Спасибо большое! |
$("#error_mes_box").text(resultStat).show().delay(5500).slideToggle("fast");resultStat=''; |
Цитата:
|
Vladislav,
Мало инфы, Выложите более полную функцию |
$(function(){ $("#mes_wall_submit").click(function(){ var mes=$("#mes").val(); var taker=$("#taker").val(); var sender=$("#sender").val(); $.ajax({ type: "POST", url: "handlers/mes_wall", data: {"mes": mes, "taker": taker, "sender": sender}, cache: false, success: function(response){ var messageResp = new Array('Произошел сбой в системе, перезайдите на свой аккаунт..','Нельзя отправлять пустое сообщение..','Ваше сообщение слишком длинное..'); var resultStat = messageResp[Number(response)]; if(response == 0){ $("#error_mes_box").text(resultStat).show().delay(5500).slideToggle("fast"); } else if(response == 1){ $("#error_mes_box").text(resultStat).show().delay(2500).slideToggle("fast"); } else if(response == 2){ $("#error_mes_box").text(resultStat).show().delay(2500).slideToggle("fast"); } else{ $("#error_mes_box").css('display','none'); $("#mes").val(""); $("#wall_message_block").html(response); } } }); return false; }); }); |
$(function(){ var arr=[],start=true; $("#mes_wall_submit").click(function(){ var mes=$("#mes").val(); var taker=$("#taker").val(); var sender=$("#sender").val(); var V = arr; arr =[mes,taker,sender]; if(start){ if( arr.join('')=== V.join('')) return; start=false; $.ajax({ type: "POST", url: "handlers/mes_wall", data: {"mes": mes, "taker": taker, "sender": sender}, cache: false, success: function(response){start=true; var messageResp = new Array('Произошел сбой в системе, перезайдите на свой аккаунт..','Нельзя отправлять пустое сообщение..','Ваше сообщение слишком длинное..'); var resultStat = messageResp[Number(response)]; if(response == 0){ $("#error_mes_box").text(resultStat).show().delay(5500).slideToggle("fast"); } else if(response == 1){ $("#error_mes_box").text(resultStat).show().delay(2500).slideToggle("fast"); } else if(response == 2){ $("#error_mes_box").text(resultStat).show().delay(2500).slideToggle("fast"); } else{ $("#error_mes_box").css('display','none'); $("#mes").val(""); $("#wall_message_block").html(response); } } }); return false; } }); }); |
Js не работает вообще если я нажимаю на кнопку второй раз. Если один раз, то норм, а вот второй все... страница уже не работает.
|
Vladislav,
Вы измените содержимое хотя одного var mes=$("#mes").val(); var taker=$("#taker").val(); var sender=$("#sender").val(); - там проверка повтора одного и того же ввода Если проверка не нужна - уберите строку if( arr.join('')=== V.join('')) return; |
Неа... нечего не получается строчку убрал, но все равно если нажму больше одного раза на кнопку "Опубликовать" (то есть отправить сообщение), то будет появляться ошибка одна за одной. Может кинуть Вам сайт, Вы сами попробуете?
Вот сайт: http://socnet.bget.ru/id6 Cкриншот куда нажимать: |
Цитата:
Цитата:
У Вас нет! Вместо этого стоит исходный |
Поставил этот js код, но нечего не работает... А что нет такой функции "stop", которая запрещает js код?
|
Цитата:
2. При смене скрипта, смените ему и имя файла, и имя файла на странице - скрипты кешируются и Вы смотрите со старым скриптом <script type="text/javascript" src="js/page_com_wall_1.js"></script> (И вообще - Отлаживаемые скрипты лучше ставить на страницу до полной отладки, и только позже прятать в файл |
Хорошо, сейчас сделаю как Вы сказали. Только напишите пожалуйста еще раз окончательный вариант js кода, который мне нужно будет поставить.
|
Поставьте тестовый
$(function(){ var arr=[],start=true; $("#mes_wall_submit").click(function(){ var mes=$("#mes").val(); var taker=$("#taker").val(); var sender=$("#sender").val(); var V = arr; arr =[mes,taker,sender]; if(start){ if( arr.join('')=== V.join('')) return false; start=false; $.ajax({ type: "POST", url: "handlers/mes_wall", data: {"mes": mes, "taker": taker, "sender": sender}, cache: false, success: function(response){start=true; var messageResp = new Array('Произошел сбой в системе, перезайдите на свой аккаунт..','Нельзя отправлять пустое сообщение..','Ваше сообщение слишком длинное..'); var resultStat = messageResp[Number(response)]; if(response == 0){ $("#error_mes_box").text(resultStat).show().delay( 5500).slideToggle("fast"); } else if(response == 1){ $("#error_mes_box").text(resultStat).show().delay( 2500).slideToggle("fast"); } else if(response == 2){ $("#error_mes_box").text(resultStat).show().delay( 2500).slideToggle("fast"); } else{ $("#error_mes_box").css('display','none'); $("#mes").val(""); $("#wall_message_block").html(response); } } });alert("Подгружен Aякс") // return false; } }); }); Если Вы будете набирать последующее сообщение отличное от предыдущего должен всплыть алерт (Данные отправлены и пришли) //чуть поправил |
Поставил как Вы и говорили, всплывающие окно появляется.. все норм. но как только я пробую убрать это окно, то есть убираю в js код:
alert("Подгружен Aякс") Js перестает работать на повторном клике (то есть на втором, третьем). Что происходит? Появляется белый экран с цифрой "0". |
Vladislav,
А c исходным скриптом без правок - Аякс работает при повторном запросе ? |
Да, до этого все работало отлично. Хоть 100 раз нажимай на кнопку js срабатывал.
|
Vladislav,
Попробуйте проверить еще раз(том ток имя файла в скрипте сменить) |
Неа, не работает (
|
Часовой пояс GMT +3, время: 11:05. |