Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Jquery многократно отправляет данные (https://javascript.ru/forum/jquery/65359-jquery-mnogokratno-otpravlyaet-dannye.html)

kuliev 14.10.2016 10:01

Jquery многократно отправляет данные
 
Вложений: 1
Есть модальное окно с select. Есть табличка в ячейки которой есть ссылка при клики на которую всплывает модальное окно с формой. Далее выбираю нужное мне значение происходит событие change. В консоле вижу, что при первом change все происходит в штатном режиме, при втором, выполняется уже два раза change при следующем еще прибавляется.

Я хочу использовать Ajax но в итоге получается что отправляются сразу несколько запросов.

$(document).ready(function() {

		//Кликаем по ссылке
		$('.std').on('click', function(e){
			e.preventDefault();

			//Получаем данные атрибута data
			var id = $(this).attr('data-id');

			//Показываем модальное окно с формой
			$('#addEvent').modal('show');
			
			//Отлавливаем событие change 
			$('#sel').on('change',function(){

				//Получаем выбраный option из списка
				var stat = $('#sel :selected').val();
				console.log(stat);

				//Очищаем select, скрываем форму
				setTimeout(function(){
					$('#sel').val('');
					$('#addEvent').modal('hide');
									
				}, 1500);

			})
		});
		
	});

http://javascript.ru/forum/attachmen...d=147642841 1
Подскажите кто знает почему так происходит.

join 14.10.2016 10:18

В месте где очищается select, допишите stat = ''; return stat;

kuliev 14.10.2016 10:29

Спасибо за ответ.

Я использую bootstrap 3 и его модальное окно. Как я сейчас заметил, если я открываю модальное окно и потом закрываю не осуществляя события change то, когда я выбираю нужный элемент то change срабатывает ровно столько сколько раз было открыто модальное окно.

Как я понимаю, нужно как-то обнулить счетчик показов окна возможно я не прав.

В документации у bootstrap по modal ничего особенного нет.

kuliev 14.10.2016 10:42

Спасибо всем, решил вопрос, но осадок остался...

В общем разделил логику скрипта, вынес событие change отдельно от тела вызова модального окна.

$(document).ready(function() {

		//Кликаем по ссылке
		$('.std').click(function(e){
			e.preventDefault();

			//Получаем данные атрибута data
			var id = $(this).attr('data-id');

			//Показываем модальное окно с формой
			$('#addEvent').modal('show');
			
		});

		//Отлавливаем событие change 
		$('#sel').change(function(){

			//Получаем выбраный option из списка
			var stat = $('#sel :selected').val();
			console.log(stat);

			//Очищаем select, скрываем форму
			setTimeout(function(){
				$('#sel').val('');
				$('#addEvent').modal('hide');		
			}, 1500);

		})
		
	});

Теперь все работает как надо )

dasdaas 01.11.2018 18:26

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


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