На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
Модераторы: ElcnU, ANDLL, fatalist
  
> Синхронное выполнение кода
    У меня на форме несколько вкладок, и я перед отправкой проверяю корректность введённых данных.

    в случае, если что то не так, я вывожу alert.

    перед alert-том пытаюсь переключить вкладку и передать фокус нужному полю - работает, но после alert.

    пробовал разные варианты, но либо alert вообще не показывается (settimeout), либо всё продолжает работать асинхронно.

    ExpandedWrap disabled
      function CheckItem(ID,pattern,field,tab) {
          
          var item=document.getElementById(ID);
          
          if ((item.value.search(pattern)==-1) & (item.value!="")) {
              TabClick(tab);
              item.focus();
              
              alert('В поле "' + field + '" введены некорректные данные');
              //settimeout("alert('ddd');",500);
          
          } else {
              return true;
          }
      }


    PS От использования паттерна в самих полях пришлось отказаться, поскольку если находишься не на той вкладке, кнопка submit не реагирует на события.
    Сообщение отредактировано: Alexanbar -
      Честно я не понял ничего, CheckItem где вызывается?
      запости сюда весь код

      Добавлено
      Цитата Alexanbar @
      перед alert-том пытаюсь переключить вкладку и передать фокус нужному полю - работает, но после alert.

      Что после алерт? Не работает? А что должно работать? :wacko:

      Короче нормально изъясняйся, а то как не русский :D
      Сообщение отредактировано: Cfon -
        Цитата Cfon @
        Честно я не понял ничего, CheckItem где вызывается?


        Вызывается через onsubmit


        Цитата Cfon @
        Что после алерт? Не работает? А что должно работать?


        Вкладка переключается, фокус передаётся, но ПОСЛЕ а не ДО alert.

        Т.е. при обнаружении некорректного ввода вначале я вижу alert, а потом переключается вкладка.
        ExpandedWrap disabled
          <form action="AddTrack.php" method="post" onsubmit="SetChange(this); return false;" enctype="multipart/form-data">
          .....
           
          </form>
           
          function SetChange(obj) {
              
              if (CheckData()) {
              
                  ......
                  
                  obj.submit();
              
              }
           
          }
           
           
           
           
          function CheckData(){
                  
              if (!CheckItem("i_tNum",/\d+/,"№",0)) { return;};
           
              ....
              
              if (!CheckItem("i_txtDuration",/\d{1,2}:[0-5]?[0-9]:[0-5]?[0-9]/,"Длительность",3)) { return;};
              
              return true;
          }
          function CheckItem(ID,pattern,field,tab) {
              
              var item=document.getElementById(ID);
              
              if ((item.value.search(pattern)==-1) & (item.value!="")) {
                  TabClick(tab);
                  item.focus();
                  
                  alert('В поле "' + field + '" введены некорректные данные');
                  
              
              } else {
                  return true;
              }
          }
          function TabClick(Tab){
           
              if (CurTab!=Tab) {
                  
                  document.getElementById("tab" + CurTab).setAttribute("class","tab");
                  document.getElementById("div" + CurTab).style.display="none";
                  CurTab=Tab;
                  document.getElementById("tab" + CurTab).setAttribute("class","seltab");
                  document.getElementById("div" + CurTab).style.display="block";
                                  
              }
          }
          вот теперь я понял, но хз через
          ExpandedWrap disabled
            setTimeout(function () {
              alert('Error');
            }, 500);

          должно работать, можешь еще промисы прикрутить или async/await.
            Цитата Cfon @
            вот теперь я понял, но хз через
            ExpandedWrap disabled
              setTimeout(function () {
                alert('Error');
              }, 500);

            должно работать, можешь еще промисы прикрутить или async/await.

            Работает.
            Можно даже 0 ставить

            Экспериментально оптимально где то 50
            1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script Execution time: 0,0802 ]   [ 14 queries used ]   [ Generated: 19.10.18, 19:50 GMT ]