Получить все входные данные в div для запроса ajax

#jquery #forms #post

#jquery #формы #Публикация

Вопрос:

Я пытаюсь получить все текстовые поля ввода, радиогруппы, флажки и т.д. У меня возникли проблемы с получением выбранных значений radio и checkboxs, я не могу в этом разобраться.

Я могу получить текстовые поля, но, похоже, не могу получить «выбранный» в нужном месте. На данный момент он просто получает первое значение для радио / флажков, а не выбранное значение.

 $('#form_1 input').each(function(key)               
    formData  = 'amp;' $('#' this.id).attr('name') '=' $('#' this.id).val();   
});
  

Спасибо

ОТРЕДАКТИРОВАНО

 $('#form_1 input').each(function(key, value) {              
    if ((this.type === "radio" || this.type === "checkbox") amp;amp; this.checked === true) {
         val = this.value;
    } else {
         val = this.value;
    }

    alert($('#' this.id).attr('name')   ' = '   val);
    formData  = 'amp;' $('#' this.id).attr('name') '=' val;    
});
  

Хорошо, теперь я получаю все значения для радиостанций и т.д., Так что я на шаг ближе. Теперь просто нужно получить значения выбранных радиостанций.

Спасибо

Ответ №1:

Просто используйте метод serialize() [docs].

Он позаботится о получении значений выбранных элементов для вас.

 var formData = $('#form_1').serialize();
  

Из документации:

Метод .serialize() может воздействовать на объект jQuery, который выбрал отдельные элементы формы, такие как , , и . Однако, как правило, проще выбрать сам тег для сериализации:

 $('form').submit(function() {
  alert($(this).serialize());
  return false;
});
  

Это создает строку запроса стандартного вида:

 a=1amp;b=2amp;c=3amp;d=4amp;e=5
  

Комментарии:

1. .serialize фактически превосходит. О, кстати, как прошел твой двухмесячный отпуск 😉

2. @Raynos: Намного продуктивнее! : o) Хотя не мог остаться в стороне. Ваша репутация была немного завышена. ; o)

3. @patrickdw Почему ты вернулся! ТАК что это захватывающее проклятие 😉

4. @Raynos: Это ужасно затягивает. Думаю, мне просто не хватало притворяться, будто я знаю, о чем говорю.

5. @Raynos: Все в порядке. Я верну все это, просто порекомендовав jQuery для всего. ; o)

Ответ №2:

 var val;
if (this.type === "radio" || this.type === "checkbox") {
     val = this.checked;
} else {
     val = this.value;
}
  

Для радиостанций и флажков вам важен атрибут checked.

Обновить

Вы написали

(this.type === "radio" || (this.type === "checkbox" amp;amp; this.checked === true))

Вы имели в виду

((this.type === "radio" || this.type === "checkbox") amp;amp; this.checked === true)

Вам нужны эти скобки в нужном месте.

Дальнейшее редактирование

Логика была немного нарушена.

В принципе, то, что вы хотите.

 if ((this.type === "radio" || this.type === "checkbox") amp;amp; this.checked === false) {
    return;
}
  

Это означает, что если не установлен флажок radio / checkbox, вы ничего не делаете.

Комментарии:

1. @Raynos — Спасибо за помощь. Значения radio имеют ценность для меня, так как же мне получить выбранное значение?

2. @Jon вы можете позвонить .checked , чтобы узнать, проверены ли они. Затем вызовите .value , чтобы получить значение проверяемого элемента.

3. @Raynos — Я отредактировал это, но я немного новичок, поэтому не знаю, где редактировать. Я отредактировал свой исходный пост до того, что у меня есть сейчас, который получает все значения radio вместо только выбранных радиостанций. Пока спасибо.

4. @Raynos — Еще раз спасибо. Я отредактировал, как вы сказали, но по-прежнему безуспешно. Я обновил свой пост.

Ответ №3:

Это не дает прямого ответа на ваш вопрос, но похоже, что вы пытаетесь достичь чего-то, что уже доступно — возможно, вы захотите проверить serialize() — используйте это как var formData = $('#form_1').serialize()