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


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