Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Скрипт срабатывает два раза (https://javascript.ru/forum/jquery/58330-skript-srabatyvaet-dva-raza.html)

AlphaSpec 16.09.2015 06:07

Скрипт срабатывает два раза
 
Bootstrap, форма, валидация плагином formvalidation.io, отправка с помощью ajax. При нажатии на кнопку в функцию обработки кнопки почему-то заходит два раза, соответственно файл скрипта отправки на почту send.php также вызывается 2 раза, приходит два письма. В чем проблема? Прошу помочь советом, с js столкнулся первый раз. Первая функция - валидация полей формы, убирая ее - приходит одно письмо... Заранее спасибо...
<form id="defaultForm">
        <!-- Поля формы -->
        <div class="form-group">                    
               <button type="submit" class="btn btn-primary">Отправить</button>
        </div>
    <div id="alertContainer" class="alert" style="display: none;"></div>
</form>

$(document).ready(function() {
 
        $('#defaultForm')
        .bootstrapValidator({
            message: 'Ввод некорректен',
            feedbackIcons: {
                valid: 'glyphicon glyphicon-ok',
                invalid: 'glyphicon glyphicon-remove',
                validating: 'glyphicon glyphicon-refresh'
            },
            fields: {
                //Список полей с правилами заполнения
            }
        });
        
    });
 
    $(function(){
        $('#defaultForm')
        .submit(function(e){        
            e.preventDefault();
            var formValidation = $('#defaultForm').data('bootstrapValidator');
            if (formValidation.isValid()) {
                var form_data=$(this).serialize();
                $.ajax({
                    type: "POST", 
                    url: "send.php", 
                    data: form_data,
                    success: function() {
                        $('#alertContainer')
                            .removeClass('alert-warning')
                            .addClass('alert-success')
                            .html('Ваше сообщение было успешно отправлено')
                            .show();
                    }
                });                 
            }
            else {
                formValidation.validate();
            }           
        });
    });

krasovsky 16.09.2015 06:30

Потому что отправку формы нужно делать в коллбеке валидации.
http://formvalidation.io/examples/ajax-submit/ здесь пример даже есть

Deff 16.09.2015 07:08

Заменить тип кнопки:
Цитата:

<form id="defaultForm">
<!-- Поля формы -->
<div class="form-group">
<button type="button" class="btn btn-primary">Отправить</button>
</div>
<div id="alertContainer" class="alert" style="display: none;"></div>
</form>
Вместо:
$('#defaultForm').submit(function(e){
e.preventDefault();

Прописать:
$('#defaultForm .btn btn-primary').click(function(){

AlphaSpec 16.09.2015 08:17

Цитата:

Сообщение от Deff (Сообщение 388795)
Заменить тип кнопки:


Вместо:
$('#defaultForm').submit(function(e){
e.preventDefault();

Прописать:
$('#defaultForm .btn btn-primary').click(function(){

Не работает...

Цитата:

Сообщение от krasovsky (Сообщение 388794)
Потому что отправку формы нужно делать в коллбеке валидации.
http://formvalidation.io/examples/ajax-submit/ здесь пример даже есть

Кроме того, на этой странице есть именно информация по двойной отправке формы, поменял скрипт по аналогии с примером на этой странице
$(document).ready(function() {
		$('#bt').on('click', function() {
			$('#defaultForm')
				.formValidation('destroy')
				.formValidation({
				})
				.on('success.form.fv', function(e) {
					e.preventDefault();
					$.ajax({
						type: "POST", 
						url: "send.php", 
						data: "data",
						success: function() {
							$('#alertContainer')
								.removeClass('alert-warning')
								.addClass('alert-success')
								.html('Ваше сообщение было успешно отправлено')
								.show();
						}
					});	
				});
		});
	});

кнопке присвоил id="bt", смотрю в хроме в отладке - не входит в это событие совсем .on('success.form.fv', function(e), соответственно и не отправляет ничего... запутался уже

AlphaSpec 16.09.2015 14:37

Ап


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