Javascript.RU

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

Разбираем события
всем добра)

есть такой кусочек кода

$('body').on('click','#btn_form', function(){
	var status_action = $(this).attr("data-status_action"); //это переменная может принимать разные значения
	alert(status_action);
       $('#form').submit(function(e){
		e.preventDefault();//запрет на стандартное событие
		e.stopImmediatePropagation();//это что бы при повторном нажатии события дважды не запускалась	
		alert("Форма");
		var data_form = $(this).serialize()  + "&status_action=" + status_action;
		alert(data_form);
					
               return false;
	});
});


вопрос, почему при повторном инициализации 'click','#btn_form', , если призошла сменаstatus_action на другое значение, то тут уже data_form она не меняется...

какие есть мыли?
Заранее спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 25.03.2018, 08:09
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Борьба с повторным отправлением формы? Вбросить это и обрабатывать событие onsubmit формы, блокируя кнопку submit до отправления, снимая блокировку после отправления.
Ответить с цитированием
  #3 (permalink)  
Старый 25.03.2018, 09:43
Профессор
Отправить личное сообщение для Sergey1986 Посмотреть профиль Найти все сообщения от Sergey1986
 
Регистрация: 28.02.2018
Сообщений: 172

Сообщение от laimas Посмотреть сообщение
Борьба с повторным отправлением формы? Вбросить это и обрабатывать событие onsubmit формы, блокируя кнопку submit до отправления, снимая блокировку после отправления.
.off( "submit" )???
Могли бы кусочек кода показать?
Ответить с цитированием
  #4 (permalink)  
Старый 25.03.2018, 09:47
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Sergey1986
.off( "submit" )???
Вот это уж вам виднее - если форма со страницы может отправляться только один раз, тогда установка обработчика .one() и удаление .off(). Но в любом случае если отправление формы производится кнопкой submit, а не фиг его знает по щелчку на каком элементе страницы, то обрабатывать нужно событие onsubmit, а не щелчок по кнопке submit.

Чего у вас делается то?
Ответить с цитированием
  #5 (permalink)  
Старый 25.03.2018, 14:47
Профессор
Отправить личное сообщение для Sergey1986 Посмотреть профиль Найти все сообщения от Sergey1986
 
Регистрация: 28.02.2018
Сообщений: 172

Сообщение от laimas Посмотреть сообщение
Вот это уж вам виднее - если форма со страницы может отправляться только один раз, тогда установка обработчика .one() и удаление .off(). Но в любом случае если отправление формы производится кнопкой submit, а не фиг его знает по щелчку на каком элементе страницы, то обрабатывать нужно событие onsubmit, а не щелчок по кнопке submit.

Чего у вас делается то?
<form id="form">
<input type="hidden" name="ID" value="' . $ID . '">
<table>
<tr><td width="100px"><p>Стол1:</p></td>
<td><input name="name2" type="number"></td>
</tr>
<tr><td><p>Комм:</p></td>
<td><input name="name3" type="text" value="" required></td>
</tr>
</table>

<input id="btn_form" status_action="add" type="submit" value="Добавить">
<input class="btn_blue" id="btn_form" status_action="remove" type="submit" value="удалить">
</form>
Ответить с цитированием
  #6 (permalink)  
Старый 25.03.2018, 15:01
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Тогда делегирование обработчика тегу body нужно только в том случае, если форма добавляется на страницу динамически и присутствует в ней постоянно. В противном случае делегирование не нужно.

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

А что у вас?
Ответить с цитированием
  #7 (permalink)  
Старый 25.03.2018, 15:11
Профессор
Отправить личное сообщение для Sergey1986 Посмотреть профиль Найти все сообщения от Sergey1986
 
Регистрация: 28.02.2018
Сообщений: 172

Сообщение от laimas Посмотреть сообщение
Тогда делегирование обработчика тегу body нужно только в том случае, если форма добавляется на страницу динамически и присутствует в ней постоянно. В противном случае делегирование не нужно.

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

А что у вас?
Форма динамически подгружетя (при нажатии на соответсвующию кнопку на странице), и в форме обратите внимание (две кнопки, не знаю правильно ли это). Забегая вперед задачу вроде как решил. Хочу понять почему так происходит!
Ответить с цитированием
  #8 (permalink)  
Старый 25.03.2018, 15:36
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Sergey1986
в форме обратите внимание (две кнопки, не знаю правильно ли это)
Хоть 20, а правильно ли это не мне судить, вы же на сервере сценарий пишите не я. Но коли вы делаете так, значит знаете, что на сервер будет отправлена та кнопка submit, которая была нажата, если конечно она имеет имя.

У вас же кнопки отправления формы не имеют имен (а вот id имеют одно и тоже, что есть ошибка, id должно быть уникальным значением), значит на сервер они отправляться не будут. При этом ваши кнопки, судя по их значениям, определяют операцию на сервере, по крайней мере так можно предположить. И каким же образом сервер сможет узнать что ему делать, если кнопки эти не отправляются? А если они не определяют операцию на сервере, то зачем тогда их две?

Что касается отправления, то вы так и не ответили на вопрос что же вам нужно. Пусть будет так - форма подгружается и после удачного отправления более не нужна, то есть она удаляется. Тогда выгоднее так:

//здесь в неком сценарии, где происходит добавление формы на страницу
//и условно считаем, что форма добавляется в слое в body из полученной переменной data
$(data).appendTo('body') //вставили нечто с формой на страницу
       .find('form') //нашли форму
       .submit(function(e) { //устанавливаем обработчик отправления
            e.prevetDefault();
            var form = $(this), //сохраним указатель на нее, если надо
                btn =  form.find('[type=submit]').prop('disabled', 1); //делаем кнопки отправления недоступными
            //здесь ajax-запрос - отправляем форму, в методах success/error которого, если будут вовзращены ошибки
            //делаем кнопки отправления доступными вновь
            //если же ошибко нет, то форма просто удаляется     
       })

Последний раз редактировалось laimas, 25.03.2018 в 18:03.
Ответить с цитированием
  #9 (permalink)  
Старый 28.03.2018, 16:17
Профессор
Отправить личное сообщение для Sergey1986 Посмотреть профиль Найти все сообщения от Sergey1986
 
Регистрация: 28.02.2018
Сообщений: 172

спасибо!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
свойства объекта события Morr123 Элементы интерфейса 3 10.08.2016 06:36
Обработка события внутри события grifangel Общие вопросы Javascript 6 04.09.2014 12:34
Дебаг js, или как найти обработчик события для тега jimm88 Events/DOM/Window 1 18.04.2012 15:11
Передача параметров в колбэки и дальнейшее их вешанье на события. Gremlin Общие вопросы Javascript 17 13.08.2011 08:54
Явный вызов процедуры обработки события. supchik Общие вопросы Javascript 18 27.01.2009 13:16