Задать вопрос

Как передать «указатель» на форму, в которой был вызван onsubmit?

<form onsubmit="return ajaxForm(this);">
          <span class="ajaxContent">&nbsp;</span>
          Введите имя:<br/>
          <input name="ajax[name]" type="text" size="20">
          <input name="ajaxFilePhp" value="test.php" type="hidden">
          <input type="submit" value="Отправить">
        </form>


Как в js, обрабатывать именно эту форму?
У меня в html несколько таких форм с onsubmit="return ajaxForm(this);" а там я обрабатываю всякое.
И мне нужно, чтобы последующие модификации, касались только этой формы, а не всех, у кого стоит class="ajaxContent".

А вот js
function ajaxForm(thisForm) {
  var data = $(form).serializeArray(); // Сериализация всех полей формы
  
  /* Отыскиваем путь до файла обработчика и записываем в ajaxFilePhp */
  for (var x in data) {
    if (data[x].name === 'ajaxFilePhp') {
      var ajaxFilePhp = data[x].value;
    }
  }
  
  $.ajax({
    type: 'POST',
    url: ajaxFilePhp, // Путь до обработчика php
    data: data, // Массив ajax[name'ов]
    success: function(html) {
      /* Вставляется внутри, где была вызвана форма */
      $('.ajaxContent').html(html); // Ответ от обработчика
    }
  });
  return false;
}
  • Вопрос задан
  • 3354 просмотра
Подписаться 4 Оценить Комментировать
Решения вопроса 1
Именно ваш код не работает (не видит функцию ajaxForm — пример), предложу немного другие варианты.

1. Присвоить всем формам ID и, затем, указать все эти ID в селекторе в JS:

$("#form1, #form2").submit(function () {
    console.log($(this)); // <-- в $(this) содержится указатель на форму
    return false;
});

Пример тут

Если не хочется писать кучу ID в jQuery (хотя по-моему ничего в этом нет, а так и надо сделать, как в 1 методе), то...

2. Присвоить форме класс (это не подразумевает, что нужно в css делать стиль под него и т.п.), но не id, так как ID должен быть уникальным:
$(".handleMe").each(function () {
    $(this).submit(function () { // <-- в $(this) содержится указатель на форму
        console.log($(this)); // <-- в $(this) содержится указатель на форму
        return false;
    });  
});

Пример здесь

P.S.: Пример для работы с span с классом ajaxContent именно той формы, которую мы отправили:
$("#form1, #form2").submit(function () {
    console.log($(this)); // <-- в $(this) содержится указатель на форму
    $("#"+$(this).attr('id')+" .ajaxContent").html('bro');
    return false;
});

Добавилась строка
$("#"+$(this).attr('id')+" .ajaxContent").html('bro');
. С помощью $(this).attr('id') получим id текущей формы (которую отправили). С помощью полученного id формируем селектор, который даст нам span текущей формы. В него и пишем что-то:
$("#"+$(this).attr('id')+" .ajaxContent").html('bro');

Сам пример лежит тут.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
subalex
@subalex
Не совсем понятен Ваш вопрос. "Указатель" и так передается - он в thisForm
Ответ написан
$("#myForm").on('submit', function (event) {
    console.log(event.target); // или $(event.target)
    return false;
});


Подробнее про event.target: api.jquery.com/event.target
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 дек. 2024, в 20:40
10000 руб./за проект
22 дек. 2024, в 20:34
3000 руб./за проект
22 дек. 2024, в 20:12
10000 руб./за проект