Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Обработка формы перед отправкой (https://javascript.ru/forum/misc/46796-obrabotka-formy-pered-otpravkojj.html)

KlausKater 24.04.2014 14:05

Обработка формы перед отправкой
 
Здравствуйте, есть не очень умный вопрос )
Есть форма, как обработать ее данные перед отправкой? Добавить что то свое, отредактировать то что ввел пользователь, и отправить исправленный вариант по стандартному action.
Есть функция submit, которая вызывается перед отправкой, но как там править данные формы, я не понимаю.
В моем случае, нужно пробежать по определенным полям формы, и сделать из них массив (нет стандартный вариант не подходит)

BETEPAH 24.04.2014 14:15

Цитата:

Сообщение от KlausKater
нет стандартный вариант не подходит

почему?

KlausKater 24.04.2014 14:20

Потому что стандартный вариант не позволяет задавать многомерный массив.
И при указании в инпуте name['index][] получается не массим name, а несколько ключей name[index], короче бред ). А нужен массив, именно с индексами.
Короч, надо обработать данные введеные пользователем, перед отправкой.

BETEPAH 24.04.2014 14:27

Какой-то странный стандартный вариант, не находите?
Цитата:

Сообщение от KlausKater
Короч, надо обработать данные введеные пользователем, перед отправкой.

Не понятно, в чем сложность возникает.
$("#my-form").submit(function(){
        //обрабатываете
    return true;
});

danik.js 24.04.2014 14:32

Цитата:

Сообщение от KlausKater
И при указании в инпуте name['index][] получается не массим name, а несколько ключей name[index], короче бред )

А чем это не массив? В PHP в POST приходит массив. Либо ассоциативный либо обычный.
name[a]
name[b] - так будет ассоциативный
name[]
name[] - так будет обычный

Видимо ты не вкурил как это работает и полез не в те дебри.

KlausKater 24.04.2014 14:47

Видимо не вкурил,
когда я задаю несколько инпутов

<input type='radio' name='test[1][] val=1>
<input type='radio' name='test[1][] val=2>
<input type='radio' name='test[1][] val=3>
<input type='radio' name='test[1][] val=4>

<input type='radio' name='test[2][] val=1>
<input type='radio' name='test[2][] val=2>
<input type='radio' name='test[2][] val=3>
<input type='radio' name='test[2][] val=4>

<input type='radio' name='test[3][] val=1>
<input type='radio' name='test[3][] val=2>
<input type='radio' name='test[3][] val=3>
<input type='radio' name='test[3][] val=4>


получается не массив test{1: 2, 2:2, 3:1}, а несколько элементов 'test[1]':[2], 'test[2]':[2], 'test[3]':[1]. Что не собриается парсером на сервере в один массив.

KlausKater 24.04.2014 14:49

Грубо говоря, есть группы инпутов, с чекбоксами, и я хочу массив:
{группа1: [1,2],
группа2:[1],
группа3:[1,2,3]}

KlausKater 24.04.2014 14:52

Товарищь BETEPAH,
Каким образом в POST добавить данные? В той самой функции submit.

BETEPAH 24.04.2014 14:56

KlausKater,
А что должно собираться в массив? Это же радиокнопка, у нее одно значение для каждой из трех групп.

BETEPAH 24.04.2014 14:57

Цитата:

Сообщение от KlausKater
Каким образом в POST добавить данные?

сделайте <input type="hidden"> и записывайте туда нужное.

KlausKater 24.04.2014 14:58

В массив должны собиратся value из радиокнопок, но по группам ))
Я для общего развития, как править данные между формой и POST?

BETEPAH 24.04.2014 15:19

<form id="my-form">
<input type='radio' name='test1' value=1>
<input type='radio' name='test1' value=2>
<input type='radio' name='test1' value=3>
<input type='radio' name='test1' value=4>

<input type='radio' name='test2' value=5>
<input type='radio' name='test2' value=6>
<input type='radio' name='test2' value=7>
<input type='radio' name='test2' value=8>

<input type='radio' name='test3' value=9>
<input type='radio' name='test3' value=10>
<input type='radio' name='test3' value=11>
<input type='radio' name='test3' value=12>
<input type="hidden" name="group1" id="group1">
<input type="hidden" name="group2" id="group2">
<input type="hidden" name="group3" id="group3">
<input type="submit" value="go">
</form>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>
<script>
$(function() {
    $('#my-form').submit(function(){
        var group1 = [],
        group2 = [],
        group3 = [];
        $('input[name=test1]').each(function() {
            group1.push(this.value)
        });
        $('input[name=test2]').each(function() {
            group2.push(this.value)
        });
        $('input[name=test3]').each(function() {
            group3.push(this.value)
        });
        $('#group1').val(group1);
        $('#group2').val(group2);
        $('#group3').val(group3);
        console.log($('#my-form').serialize());
        return false;
    });
});
</script>

danik.js 24.04.2014 15:42

KlausKater, что на сервере? PHP? Тогда весь твой двухуровневый массив должен быть в $_POST['test']

KlausKater 24.04.2014 15:52

на сервере питон, но это сейчас не проблема.
Товарищ Ветеран извращенец!
Во первых, количество групп заранее неизвестно!
Во вторых это конечно хорошо, что весь массив вывелся в консоль, но мне то он на сервере нужен ))
Пока решил методом:

$.each($('form input:checked'), function(i, n){
          summ = summ + parseInt(n.value);
        });
        var input = $("<input>").attr("type", "hidden").attr("name", 'summ').val(summ);
        $(this).append($(input));


тут собирается сумма value выбраных (чекнутых) inputов.
Решение не очень,но работает. хотел передать массив на сервер, и сумму считать на нем.

BETEPAH 24.04.2014 15:57

Цитата:

Сообщение от KlausKater
Товарищ Ветеран извращенец!

это говорит товарищ, который не понимает, для чего существуют радиокнопки :)
Цитата:

Сообщение от KlausKater
весь массив вывелся в консоль, но мне то он на сервере нужен

консоль я добавил для наглядности. Уберите console.log и поставьте return.true и будет на сервере.
Цитата:

Сообщение от KlausKater
тут собирается сумма value выбраных (чекнутых) inputов

Цитата:

Сообщение от KlausKater
В массив должны собиратся value из радиокнопок, но по группам

Вам не кажется, что эти два предложения противоречат друг другу? Чекнутый радиобатон может быть только ОДИН в ГРУППЕ.
Всего хорошего

KlausKater 24.04.2014 17:07

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

По поводу вывода в POST, я бы никогда не подумал что все таки просто ) Спасибо. Это я и хотел.

Насчет извращенца, настаиваю )) Перебирать вручную группы инпутов, извращение и индусятина ))

Я пытался сделать все правильно, чтобы можно было на сервере в цикле, перебрать массив групп, а внутри перебрать чекнутые инпуты (в случае с чекбоксами их может быть несколько) По идее, в value инпутов должны быть ид объектов, а то что там сейчас должно дергаться из базы, по ид. Но текущая задача не требует таких заморочек, если задача усложнится, придется делать правильно ))

danik.js 24.04.2014 18:11

KlausKater, походу у питона такой php-шной фишки нету к сожалению.. Можешь в браузере сериализовать и засылать в JSON-формате и использовать request.json на сервере, правда тогда фиг все это будет работать с отключенным JS. Хотя ты вроде смирился с этим (или не подумал).


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