Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.04.2014, 23:02
Новичок на форуме
Отправить личное сообщение для OldBob Посмотреть профиль Найти все сообщения от OldBob
 
Регистрация: 16.04.2014
Сообщений: 5

submit только после второго клика
Доброго всем времени суток. Вообщем вот такой код
var name;
  var email;
  var phone;

 function nameChange(element,timeOut)
      {
              clearTimeout(this.tOut);
              this.tOut=setTimeout(function(){


        $('#userName').removeClass();
        var nameV =  $('#userName').val();
        var nameLngth = $('#userName').val().length;
        var filterName = /^[a-zа-я]+$/i;
        if(filterName.test(nameV)&& nameLngth > 2)
         {
            $('#userName').addClass('valid');
            $('#userName').prev().text('');
            name=1;

           if(name==1)
           {

            $('#submit').html('<a href="javascript: void(0)" onclick="formSend.submit()">Заказать</a>');
            }

         }
         else
        {
            $('#userName').addClass('notValid');

            $('#userName').prev().text('Имя  может содержать только буквы и быть не короче 3-х знаков');
            $('#submit').html('<ins>Заказать</ins><br><font color=\"red\">Не заполнено </font>');
            name='';

        }


      });
    }




jQuery(function(){


     $('.text').val('');
     var nameLngth = $('#userName').val().length;
     if(nameLngth <= 1)
     {
       $('#submit').html('<ins>Заказать</ins><br><font color=\"red\">Не заполнено... </font>');
        }

    $('#userName').blur(function(){
        $('#userName').removeClass();
         var nameV =  $('#userName').val();
        var nameLngth = $('#userName').val().length;
        var filterName = /^[a-zа-я]+$/i;
      if(filterName.test(nameV)&& nameLngth > 2)
       {
            $('#userName').addClass('valid');
            $('#userName').prev().text('');
            name=1;
           if(name==1)
           {
           $('#submit').html('<a href="javascript: void(0)" onclick="formSend.submit()">Заказать</a>');
           }

         }
         else
        {
            $('#userName').addClass('notValid');
            $('#userName').prev().text('Имя  может содержать только  буквы и быть не короче 3-х знаков');
            name='';
            $('#submit').html('<ins>Заказать</ins><br><font color=\"red\">Не заполнено...</font>');
        }

      });

});
</script>


<form method=POST action=cart.htm  name=formSend ><input type=hidden name=step value=2>
<table width=100% border=0 cellspacing=0 cellpadding=0>

     <tr>
    <td width=50% align=left>Имя *</td>
   <td width=50% align=right><div class="error"></div><INPUT type="text" name="name" maxlength="255" size="60" value="" class="text" id="userName" onkeyup="nameChange(this,100)"></td>
    </tr><tr><td colspan=2 height=5></td></tr><tr>
    <td width=50% align=left>Фамилия </td>
   <td width=50% align=right><div class="error"></div><INPUT type="text" name="f_name" maxlength="255" size="60" value="" class="text" id="userFName"></td>
    </tr><tr><td colspan=2 height=5></td></tr><tr><td></td><td aligh="right"><div id="submit" style="text-align:right;"></div></td></tr><script>

</script>

</table>
</form>

Проблема в том что если ссылка "Заказать" активируется по событию keyup то нажимать на неё нужно два раза. Т.е. хоть она и активировалась но всё равно нужно ждать blur. Понятно что огород нагородил, но уж не обезсутьте Подскажите в каком месте косяк.
Заранее благодарен за вашу помощь.
Ответить с цитированием
  #2 (permalink)  
Старый 17.04.2014, 03:39
Аватар для MVS
MVS MVS вне форума
Аспирант
Отправить личное сообщение для MVS Посмотреть профиль Найти все сообщения от MVS
 
Регистрация: 07.07.2012
Сообщений: 46

Сказать честно ...?
Код нужно выбросить в мусорное ведро
Что это? О чем оно говорит?

$('#userName').prev().text('');
name=1;
if(name==1)
{
Ответить с цитированием
  #3 (permalink)  
Старый 17.04.2014, 07:00
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

Мда...
Естественно он не будет при первом клике срабатывать т.к. ты ссылку при блюре перезаписываешь, куда ему кликать то. Зачем вообще это надо, если и так на keyup она перезапишется? И почему просто не повесить обработчик на событие input? Да и вообще что мешает финальную валидацию проводить прямо во время submit? Зачем вообще все эти манипуляции с перезаписью содержимого дива? Почему нельзя сделать нормальную кнопку и дисаблить ее?
В общем, говнокод это, как он есть.
Ответить с цитированием
  #4 (permalink)  
Старый 17.04.2014, 15:02
Новичок на форуме
Отправить личное сообщение для OldBob Посмотреть профиль Найти все сообщения от OldBob
 
Регистрация: 16.04.2014
Сообщений: 5

Сообщение от MVS
Сказать честно ...?
Код нужно выбросить в мусорное ведро
Что это? О чем оно говорит?
Сообщение от jsnb
В общем, говнокод это, как он есть.
Ну как бы спорить не буду. Учусь.
Так лучше?
jQuery(function(){


     $('.text').val('');
     var nameLngth = $('#userName').val().length;
     if(nameLngth <= 1)
     {
       $('#submit').html('<ins>Заказать</ins><br><font color=\"red\">Не заполненно...</font>');
        }

    $('#userName').on('input' ,function(){
        $('#userName').removeClass();
         var nameV =  $('#userName').val();
        var nameLngth = $('#userName').val().length;
        var filterName = /^[a-zа-я]+$/i;
      if(filterName.test(nameV)&& nameLngth > 2)
       {
            $('#userName').addClass('valid');
            $('#userName').prev().text('');
            $('#submit').html('<a href="javascript: void(0)" onclick="formSend.submit()">Заказать</a>');
          

         }
         else
        {
            $('#userName').addClass('notValid');
            $('#userName').prev().text('Имя  может содержать только  буквы и быть не короче 3-х знаков');
            $('#submit').html('<ins>Заказать</ins><br><font color=\"red\">Не заполненно...</font>');
        }

      });

});

Сообщение от MVS
name=1;
if(name==1)
{
В данном случае просто не нужно.
jsnb за инпут спасибо, всё получилось.
Проверку по сабмиту не устраивала, изначально так и было. Нужно именно "на лету". Изврат с перезаписью дива уберу. Изначально делал с кнопкой, думал с ней что не так.
Ответить с цитированием
  #5 (permalink)  
Старый 17.04.2014, 15:24
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

Сообщение от OldBob Посмотреть сообщение
Так лучше?
Уже лучше. Правда по хорошему надо бы сделать нормальную функцию для валидации, а в обработчиках ее уже вызывать. И избавиться от prev() потому что жесткая привязка к структуре не есть хорошо.

Сообщение от OldBob Посмотреть сообщение
за инпут спасибо, всё получилось.
Инпут, кстати, не работает в старых IE, там вместо него propertychange.

Сообщение от OldBob Посмотреть сообщение
Проверку по сабмиту не устраивала, изначально так и было.
Я имел ввиду финальную валидацию т.е. непосредственно на событие submit повесить обработчик, который бы перед оправкой формы ее проверял и если что-то не так, то return false. А до отправки проверять можно как угодно.
Ответить с цитированием
  #6 (permalink)  
Старый 17.04.2014, 17:02
Новичок на форуме
Отправить личное сообщение для OldBob Посмотреть профиль Найти все сообщения от OldBob
 
Регистрация: 16.04.2014
Сообщений: 5

Сообщение от jsnb
Уже лучше. Правда по хорошему надо бы сделать нормальную функцию для валидации, а в обработчиках ее уже вызывать. И избавиться от prev() потому что жесткая привязка к структуре не есть хорошо.
Подумаю, всегда ведь есть к чему стремится.
Сообщение от jsnb
Я имел ввиду финальную валидацию т.е. непосредственно на событие submit повесить обработчик, который бы перед оправкой формы ее проверял и если что-то не так, то return false. А до отправки проверять можно как угодно.
Перед отправкой, да есть отдельно полная проверка всех полей а это как бы для визуализации.
Сообщение от jsnb
Инпут, кстати, не работает в старых IE, там вместо него propertychange.
Спасибо, учту.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему скрипт срабатывает только после обновления страницы? Randomizer jQuery 2 01.09.2010 19:01
Событие hover только после 2 секунд niksan jQuery 7 12.08.2010 14:16
Открытие ссылки после клика по баннеру banderos Общие вопросы Javascript 6 31.01.2010 00:02
переход по ссылке только после нескольких кликов по ней smilexpo Events/DOM/Window 8 24.11.2009 16:57
Не убирать кнопку после клика по ней. CompModdd jQuery 2 12.05.2009 02:13