Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Разбираем события (https://javascript.ru/forum/misc/73149-razbiraem-sobytiya.html)

Sergey1986 25.03.2018 02:20

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

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

$('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 она не меняется...

какие есть мыли?
Заранее спасибо!

laimas 25.03.2018 08:09

Борьба с повторным отправлением формы? Вбросить это и обрабатывать событие onsubmit формы, блокируя кнопку submit до отправления, снимая блокировку после отправления.

Sergey1986 25.03.2018 09:43

Цитата:

Сообщение от laimas (Сообщение 481381)
Борьба с повторным отправлением формы? Вбросить это и обрабатывать событие onsubmit формы, блокируя кнопку submit до отправления, снимая блокировку после отправления.

.off( "submit" )???
Могли бы кусочек кода показать?

laimas 25.03.2018 09:47

Цитата:

Сообщение от Sergey1986
.off( "submit" )???

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

Чего у вас делается то?

Sergey1986 25.03.2018 14:47

Цитата:

Сообщение от laimas (Сообщение 481383)
Вот это уж вам виднее - если форма со страницы может отправляться только один раз, тогда установка обработчика .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>

laimas 25.03.2018 15:01

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

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

А что у вас?

Sergey1986 25.03.2018 15:11

Цитата:

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

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

А что у вас?

Форма динамически подгружетя (при нажатии на соответсвующию кнопку на странице), и в форме обратите внимание (две кнопки, не знаю правильно ли это). Забегая вперед задачу вроде как решил. Хочу понять почему так происходит!

laimas 25.03.2018 15:36

Цитата:

Сообщение от 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 которого, если будут вовзращены ошибки
            //делаем кнопки отправления доступными вновь
            //если же ошибко нет, то форма просто удаляется     
       })

Sergey1986 28.03.2018 16:17

спасибо!


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