Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Запрет js кода, пока не закончиться предыдущий. (https://javascript.ru/forum/misc/35630-zapret-js-koda-poka-ne-zakonchitsya-predydushhijj.html)

Vladislav 16.02.2013 18:54

Запрет js кода, пока не закончиться предыдущий.
 
Здравствуйте, есть у меня поле для ввода текста, кнопка для отправки содержимого и еще есть блок с выводом ошибки.

В этот блок заноситься текст ошибки, например:
Пользователь не ввел текст и нажал на кнопку отправить -- в блоке ошибок появиться текст: "Нельзя отправлять пустое сообщение".

Все работает на ура, но только вот если пользователь нажмет больше одного раза на кнопку, при это не введя нечего в поле отправки (то есть попытается отправить пустое сообщение), то ошибка будет появляться несколько раз подрят одна после одной.

Вопрос: Как избавиться от повторного "проигрывания" js кода пока не закончиться предыдущий?

Вот как в js у меня выводит текст ошибки:
$("#error_mes_box").text(resultStat).show().delay(5500).slideToggle("fast");

Спасибо большое!

Deff 16.02.2013 19:06

$("#error_mes_box").text(resultStat).show().delay(5500).slideToggle("fast");resultStat='';

Vladislav 16.02.2013 19:12

Цитата:

Сообщение от Deff (Сообщение 234769)
$("#error_mes_box").text(resultStat).show().delay(5500).slideToggle("fast");resultStat='';

Не помогло.

Deff 16.02.2013 19:23

Vladislav,
Мало инфы, Выложите более полную функцию

Vladislav 16.02.2013 19:26

$(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;                                                               
    });
});

Deff 16.02.2013 19:38

$(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;          
         }                                                     
    });
});

Vladislav 17.02.2013 00:32

Js не работает вообще если я нажимаю на кнопку второй раз. Если один раз, то норм, а вот второй все... страница уже не работает.

Deff 17.02.2013 00:37

Vladislav,
Вы измените содержимое хотя одного

var mes=$("#mes").val();
var taker=$("#taker").val();
var sender=$("#sender").val();

- там проверка повтора одного и того же ввода
Если проверка не нужна - уберите строку
if( arr.join('')=== V.join('')) return;

Vladislav 17.02.2013 14:49

Неа... нечего не получается строчку убрал, но все равно если нажму больше одного раза на кнопку "Опубликовать" (то есть отправить сообщение), то будет появляться ошибка одна за одной. Может кинуть Вам сайт, Вы сами попробуете?

Вот сайт: http://socnet.bget.ru/id6

Cкриншот куда нажимать:


Deff 17.02.2013 15:24

Цитата:

Сообщение от Vladislav
Вот сайт: http://socnet.bget.ru/id6

Вот этого Скрипта
Цитата:

$(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);
}
}
});alert("Подгружен Aякс") //
return false;
}
});
});
Добавил алерт для теста обращений к серверу (потом убрать)
У Вас нет!
Вместо этого стоит исходный

Vladislav 17.02.2013 15:48

Поставил этот js код, но нечего не работает... А что нет такой функции "stop", которая запрещает js код?

Deff 17.02.2013 16:28

Цитата:

Сообщение от Vladislav
Поставил этот js код,

1. Не вижу что поставили!
2. При смене скрипта, смените ему и имя файла, и имя файла на странице - скрипты кешируются и Вы смотрите со старым скриптом
<script type="text/javascript" src="js/page_com_wall_1.js"></script>
(И вообще - Отлаживаемые скрипты лучше ставить на страницу до полной отладки, и только позже прятать в файл

Vladislav 17.02.2013 16:37

Хорошо, сейчас сделаю как Вы сказали. Только напишите пожалуйста еще раз окончательный вариант js кода, который мне нужно будет поставить.

Deff 17.02.2013 16:45

Поставьте тестовый
$(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; 
 } 
 });
 });

Если Вы будете набирать последующее сообщение отличное от предыдущего
должен всплыть алерт (Данные отправлены и пришли)
//чуть поправил

Vladislav 17.02.2013 17:34

Поставил как Вы и говорили, всплывающие окно появляется.. все норм. но как только я пробую убрать это окно, то есть убираю в js код:

alert("Подгружен Aякс")

Js перестает работать на повторном клике (то есть на втором, третьем). Что происходит? Появляется белый экран с цифрой "0".

Deff 17.02.2013 18:39

Vladislav,
А c исходным скриптом без правок - Аякс работает при повторном запросе ?

Vladislav 17.02.2013 18:40

Да, до этого все работало отлично. Хоть 100 раз нажимай на кнопку js срабатывал.

Deff 17.02.2013 18:50

Vladislav,
Попробуйте проверить еще раз(том ток имя файла в скрипте сменить)

Vladislav 17.02.2013 19:03

Неа, не работает (


Часовой пояс GMT +3, время: 11:05.