2016-09-28 2 views
1

Я делаю функцию проверки формы, и если нет пустого ввода, кнопка выполняет два щелчка для правильной работы.jQuery: кнопка отправляет форму только после двух кликов

Это моя функция:

function validate(root, animation, error) { 
    $('.button').on('click', function(event) { 
     event.preventDefault() 

     var isEmpty = false, 
      root  = $(root), 
      animation = animation ? animation : 'animation animation-shake', 
      error  = error ? error : 'error'; 

     root.find('form').find('.required').each(function() { 
      if ($(this).val().length == 0) { 
       isEmpty = true; 
       root.addClass(animation); 
       $('.required.error:first').focus(); 
       $(this).addClass(error).on('keydown', function() { 
        $(this).removeClass(error); 
        root.removeClass(animation); 
       }); 
      } 
     }); 

     if (isEmpty) return; 
     $(this).unbind('click'); 
    }); 
} 

Код, который вызывает функцию:

validate('#login-box .box'); 

Любые идеи, было бы здорово, также предложения о том, как сократить/улучшить код.

+0

Каково предполагаемое поведение? –

+3

Установите 'event.preventDefault()' inside 'if (isEmpty) {...}' block. Нет необходимости в операторе return или unbind click event –

+1

'error = error || 'error'; 'выполняет ту же работу, что и' error = error? error: 'error'; ' – tewathia

ответ

2

Ваш метод должен быть:

function validate(root, animation, error) { 
    $('.button').on('click', function(event) { 
     /* event.preventDefault();*/ //<< remove it 
     var isEmpty = false, 
      /*...*/ 
     /*if (isEmpty) return; 
      $(this).unbind('click');*/ //<< remove it 

     // and set at handler bottom 
     if (isEmpty) event.preventDefault(); 
    }); 
} 

только предотвратить представить поведение, когда это необходимо.

0

Вы привязываете событие click к кнопке внутри функции проверки, поэтому для этого требуется 2 клика. Первый клик привязывает событие клика, а затем второй код запускает внутри него код. Удалить из контекстного клика событие из кода.

+0

Еще до того, как это была функция, результат был таким же. –

+0

Где говорится, что 'validate (..)' вызывается нажатием кнопки? –

+0

@ freedomn-m. Я думаю, что $ ('. Button'). Click() добавляется внутри функции проверки ... проверьте, не ошибаюсь ли я – Developer