2014-08-27 4 views
0

Я хочу выполнить проверку Javascript после отправки пользователем формы. Документация для jQuery .submit() ясно говорит:event trigger on submit

Событие отправки отправляется элементу, когда пользователь пытается отправить форму.

Но если я ставлю

$('form.simple_form.new-channel').submit perform_validation() 

в мой код, perform_validation() запускается каждый раз, когда страница визуализируется! Даже если на нем нет формы и нет кнопки «отправить». Каков правильный способ вызова функции после отправки формы?

ответ

2

Я считаю, что вы не хотите запускать действие после отправки, вы просто хотите запустить его после нажатия кнопки отправки пользователем.

Не работает ли это так?

$('form.simple_form.new-channel').submit(function(e){ 
    if(!perform_validation()){ 
    e.preventDefault(); //prevents form from being submitted if validation fails 
    return; //exits function 
    } 
}) 

Функция execute_validation должна возвращать логическое значение.

EDIT:

Вы писали Ваша функция, как это:

$('form.simple_form.new-channel').submit perform_validation() 

, который точно так же, как написание:

$('form.simple_form.new-channel').submit; 
perform_validation(); 

В вашей версии скрипта просто запускает perform_validation(), так как он не работает внутри обработчика событий.

Вы также могли бы сделать это следующим образом:

$('form.simple_form.new-channel').submit(perform_validation); 

Это один говорит скрипт для запуска на форме представить, функции, имя которой передается в качестве аргумента.

+0

так, в чем разница между вами ответа и код в Ут вопрос? – Leo

+0

Как вы понимаете разницу в этом контексте? $ ('form.simple_form.new-channel'). Submit просто возвращает код функции отправки form.simple_form.new-channel. perform_validation(), поскольку вы написали, что эта функция выполняется. То, как вы написали это, означает именно так: $ ('form.simple_form.new-channel'). Submit; perform_validation(); – entio

+0

@Leo взгляните на это, чтобы увидеть разницу: http://stackoverflow.com/a/25179299/827168 – pomeh

-2

Проблема заключается в вашем синтаксисе.

$('form.simple_form.new-channel').submit perform_validation() 

Из-за либеральности JavaScript в тот факт, что вы не вызывая представить здесь и у вас нет semicolin после perform_validation ... не вызывает ошибку, а просто вызывает выполнить проверку, как если бы он был на линии все по своей самости с полуколином.

, чтобы исправить это, сделать это

$('form.simple_form.new-channel').submit(perform_validation); 
+1

Вы только что совершили ту же ошибку; преждевременный вызов. Прочтите этот: http://tobyho.com/2011/10/26/js-premature-invocation/ – entio

+0

@entio является правильным. Обе строки эквивалентны, но первая «$ (« form.simple_form.new-channel »). Submit perform_validation()' - это только код CoffeScript, где скобки не требуются в отношении метода 'submit' – pomeh

+0

@DaleCorns, вы можете проголосовать их, только если они не отвечают на вопрос ОП, что действительно то, что вы отвечаете, не делает. Вы можете отредактировать и исправить свой ответ, а затем я смогу удалить свой downvote, но поскольку уже есть принятый ответ, который не имеет никакого смысла. – pomeh