Форма в форме

Апокалипсис

тех дир matras.ru
Форма в форме

Добрый вечер! Ситуация такая.
Имется HTML форма
Код:
<form action="" method="post">

<input type="text" name="item[1]">
....
<input type="text" name="item[10]"> - их может быть хоть скока


<input type="text" name="name">
<input type="text" name="email">
<input type="submit">
</form>
Необходимо сделать ещё одну форму - которая бы передавала только параметры item - в другой скрипт.
т.е. так:
Код:
<form action="" method="post">

<form action="" method="post"
<input type="text" name="item[1]">
....
<input type="text" name="item[10]"> - их может быть хоть скока
<input type="submit" value="Сохранить количество">
</form>

<input type="text" name="name">
<input type="text" name="email">
<input type="submit">
</form>
Но это не работает... что посоветуете ?
 

Gas

может по одной?
Апокалипсис
форму в форме сделать нельзя, посоветуем js
 

Апокалипсис

тех дир matras.ru
Нарисовал себе алгоритм в голове.
1. Собираем имя полей формы item[..] и их значения.
2. Делаем ещё одну форму с hidden
3. В цикле это всё туда а заместо сабмита в "Сохранить количество" - сделать button и повесить на onclick...
Вопрос. Как выцепить на JS все имена и значения форм этих ?
 

BRat

o_0
пройдись по всем элементам формы и регуляркой выцепи элементы с нужным именем
потом можно эти элементы тупо скопировать (cloneNode вроде) в новую форму, и заменить тип на hidden
 

maxwell

artifex
Апокалипсис, формы в форме не должно быть по определению, подумай над задачей еще раз.

Можешь чуть-чуть поподробней о своей задаче расказать? Думаю найдем решение.
 

Апокалипсис

тех дир matras.ru
Есть готовая форма которую менять нельзя.
Форму трогать нельзя. Нужно как то сохранять только inputы которые имею имя item[...]
Я не знаю как можно на JS выбрать input name ...

-~{}~ 31.07.08 19:56:

т.е. по идее должно быть 2 button'а
один сабмит всю форму сразу
а другой должен посылать на серв данные только инпутов которые имеют имя item[...]
 

maxwell

artifex
PHP:
function sendItems(form){
      for (i = 0; i < form.elements.length; i++) {
          e = form.elements[i];
          if (e.name.match(/item\[[0-9]+\]/)) {
              alert(e.name);
          }
      }
  }

...

    <input type="text" name="item[1]">
    ...
    <input type="text" name="item[100]">
    <button onClick="sendItems(this.form); return false;">send</button>
Но лучше все таки итемы кешировать.

-~{}~ 31.07.08 20:19:

Да и кстати, все равно ваше решение не правильно.
2 button'а — кал, пользователь не поймет на какой надо жать
 

Апокалипсис

тех дир matras.ru
нее. там будет
допустим 5 инпутов. под ними кнопка Пересчитать заказ.
а снизу формы заполнения ФИО и т.п. и внизу отправить заказ.
такая вот система разнести на 2 формы нельзя.. так заказчик хочет. приходится извращаться.

спасибо, попробую.
 

FB3

Новичок
Посчитать заказ можно JavaScript'ом, тогда ничего на сервер не надо отправлять.
А чтобы легко заматчить все нужные item, можно взять prototype какой-нить.
 

Апокалипсис

тех дир matras.ru
считает заказ яваскрипт итак. но юзер если поставил ко- во 10 - и уйдёт из корзины - то они естессно не сохранятся. аякс юзать не хочется т.к малоли а вдруг данные не передадутся.
 

FB3

Новичок
Че-то я запутался.
Что нужно-то?
Может проще наглядное изображение формы дать и к каждой кнопочке написать, какое действие она должна выполнять?
 

Кощей

if(!$needle) die("ooh");
немного не понял, вам нужно перед отправкой формы данные еще куда-то отослать ?

-~{}~ 31.07.08 21:07:

А все понял. Передать в другой скрипт непередавая всю форму а только эти поля впринципе можно. Взять к примеру все поля итемы, создть в документе новую форму, скопировать их туда и засабмитить форму. Но почему нельзя всю форму сабмитить вообще и на сервере разбирать что нужно а что нет.
 

Армян

Новичок
т.е. по идее должно быть 2 button'а
один сабмит всю форму сразу
а другой должен посылать на серв данные только инпутов которые имеют имя item[...]
Не вариант отправлять все данные, а на сервере уже разбиратся какие поля использовать какие нет?
 

Апокалипсис

тех дир matras.ru
cпасибо maxwell за подсказку как выдрать имена инпутов:)
Ну публикую код по нему понятно какую задачу я решал:
PHP:
function sendItems(form){
      for (i = 0; i < form.elements.length; i++) {
          e = form.elements[i];
          if (e.name.match(/item[[0-9]+]/)) {
          document.forms['a'].elements[e.name].value=document.forms['f1'].elements[e.name].value;
          }
      }
      document.forms['a'].submit();
}
</script>
Код:
</head>
<body>
<form action="" method="post" name="a">
<input type="hidden" name="item[1]" value="">
<input type="hidden" name="item[100]" value="">
</form>
    <form action="" method="post" name="f1">
    Товар1 - количество
    <input type="text" name="item[1]" value="1">
    Товар2 - количество
    <input type="text" name="item[100]" value="2">
    Ваше имя
    <input type="text" name="name">
    ......
    <button onClick="sendItems(this.form); return false;">Пересчитать заказ</button>
    <input type=submit value='отправить заказ'>
    </form>
[/php]
 
Сверху