Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 31.05.2016, 05:23
Аспирант
Отправить личное сообщение для winch Посмотреть профиль Найти все сообщения от winch
 
Регистрация: 30.04.2015
Сообщений: 87

Немного объясню зачем мне надо вешать обработчик именно на submit.
В современной web разработке очень часто возникает необходимость отправлять формы аяксом. поэтому, чтобы не писать один тот-же код на разных страницах, я решил сделать универсальную функцию:
function FormSubmitAjax(sel1, success, sel2){  
    $(sel1).on('submit', sel2, function(ev){
      ev.preventDefault();
      var form = $(ev.target);
      $.ajax({ type: form.context.method,
        url: form.context.action,
        data: form.serialize(),
        context: { form: form},
        success: function(dat, status){
	       success.apply(this, [dat, status]);
        },
    });
  });
}

однако при практическом использовании выяснилось что <input type="submit" name="test"/> не посылается, вот ищу способ, как это исправить.
Ответить с цитированием
  #22 (permalink)  
Старый 31.05.2016, 13:17
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Метод serialize() не возвращает поля отправки файлов и кнопки отправки формы, но ни ко не запрещает form.serialize() + "&" + и добавить кнопку. Зачем она только нужна не понятно.
Ответить с цитированием
  #23 (permalink)  
Старый 31.05.2016, 13:45
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

winch,
function ajaxFormSubmit(selector, settings) {
	$(selector).submit(function(e) {
		e.preventDefault();
		var $form = $(this), $button = $form.find(':submit:focus');
		if (!$button.length) return;
		$.ajax($.extend({
			url:  $form.attr('action'),
			type: $form.attr('method'),
			data: $form.serialize() + '&' + $.param($button),
			context: $form
		}, settings));
	});
}

ajaxFormSubmit('#myForm', {
	success: function(data, status, xhr) {
		// this == $form
		var $form = this;
		// ...
	},
	error: function(xhr, status, error) {
		// this == $form
	},
	beforeSend: function(xhr, settings) {
		// this == $form
	}
});
Ответить с цитированием
  #24 (permalink)  
Старый 31.05.2016, 22:36
Аспирант
Отправить личное сообщение для winch Посмотреть профиль Найти все сообщения от winch
 
Регистрация: 30.04.2015
Сообщений: 87

Сообщение от laimas Посмотреть сообщение
Метод serialize() не возвращает поля отправки файлов и кнопки отправки формы, но ни ко не запрещает form.serialize() + "&" + и добавить кнопку. Зачем она только нужна не понятно.
Нужна она затем, чтобы знать какую именно кнопку нажал пользователь, в тех случаях если кнопок несколько на одной форме.
Ответить с цитированием
  #25 (permalink)  
Старый 31.05.2016, 22:43
Аспирант
Отправить личное сообщение для winch Посмотреть профиль Найти все сообщения от winch
 
Регистрация: 30.04.2015
Сообщений: 87

Rise
ага! основная идея в том, чтобы перед отправкой найти нажатую кнопку селектором ':submit:focus'
спасибо! воспользуюсь.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обработка строки при ajax (post) запросе virus-07 AJAX и COMET 2 17.07.2013 13:55
Подсветка кнопок при использовании AJAX dTi AJAX и COMET 3 03.07.2013 19:14
При подгрузке страницы через AJAX JS не отрабатывается, но подгружается vityurov Общие вопросы Javascript 2 20.06.2013 12:24
При наборе адреса с www не работает AJAX (JQuery)! madmis AJAX и COMET 3 23.11.2009 19:03
Кодировка при использовании Ajax Nichloas AJAX и COMET 9 17.09.2009 16:06