#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()