Показать сообщение отдельно
  #1 (permalink)  
Старый 02.04.2010, 01:37
Новичок на форуме
Отправить личное сообщение для Dark Посмотреть профиль Найти все сообщения от Dark
 
Регистрация: 02.04.2010
Сообщений: 6

Не отправляются на сервер данные из клонированных полей
Задача стоит такая: по нажатию кнопки добавляем определенную формочку с полями в основную форму.

Вроде задача тривиальная и решалась уже много раз, но нигде не нашел описание подобного глюка: формочка добавляется во всех броузерах, имена полей корректно заменяются.
Но, когда отправляешь форму на сервер по кнопке Submit в броузерах Mozila FireFox и Google Chrome - на сервер отсылаются все статичные поля, а динамично созданных нет .
В то же время при использовании IE - порядок: на сервере все поля и статичные и динамичные.

Как не ругают IE - а в этой задаче он уделал остальные броузеры!

Использую jQuery 1.4.2
Для отправки использую стандартную кнопку формы Submit, для формы установлен method=POST.

Функция которая добавляет строку в основную форму:
$("img.button_add_preparat").click(
	function(){
	// #table_pestecid - это основная таблица в которой есть статичные данные
	//#preparate_empty_new - DIV в котором содержится таблица с примерами нужных форм

	// для начала ищем номер последнего препарата
	if ($("#table_pestecid").find("tr.preparate_descript").size()>0){
	var Index = parseInt($("#table_pestecid").find("tr.preparate_descript").last().find("#index_i").attr('value'))+1;
	}else{
	var Index = 0;
	}

	// добавляем поле (нужна одна строка из таблицы - tr)
	$("#table_pestecid").append($("#preparate_empty_new").find("tr.preparate").clone(true));

	// получаем объект
	var ObjForm = $("#table_pestecid").find("tr.preparate").last().get(0);
	// переименовать поля
	var filed = new Array("preparate_id", "name", "percent", "form");
	for (var i=0; i<filed.length; i++){
		$(ObjForm).find('#'+filed[i]).attr('name', 'preparate[' + Index + '][' + filed[i] + ']');
		$(ObjForm).find("#" + filed[i]).attr('value', '');
		$(ObjForm).find('#'+filed[i]).attr('id', 'preparate[' + Index + '][' + filed[i] + ']');
	}
	}
)


В этом DIV я храню примеры нужных мне табличек. Упущу другие строки, дабы не загромодать кодом
<div id=preparate_empty_new style="display:none">
	<table>
	<tr class="preparate" style="">
		<input type="hidden" id="preparate_id" />
		<td><div id="TestObj"></div><input type="text" id="name" class="input"></td>
		<td><input type="text" id="percent" class="input"></td>
		<td><select id="form" class="input">
			<option value="0"></option>
			<?for ($i=0;$i<count($prep_forms);$i++){?>
				<option value="<?=$prep_forms[$i]["id"]?>"><?=$prep_forms[$i]["name"]?></option>
			<?}?>
			</select>
		</td>

		<td style="vertical-align:text-bottom">
			<img src="/newsite/admin/img/but_edit.gif" style="cursor:pointer;" class="preparate_button">
			<img src="/newsite/admin/img/but_delete.gif" style="cursor:pointer;" class="preparate_button_del">
		</td>
	</tr>
</table>
</div>


В php смотрю получаемые данные вывод:
<?
echo "<pre>";
print_r($_POST);
echo "</pre>";
exit;
?>



Ну и вот самое интересное: используя IE видим такой вывод:

Код:
 [preparate] => Array
        (
// Статическое поле:
            [0] => Array
                (
                    [id] => 89
                    [name] => Дерекс
                    [percent] => 17
                    [form] => в.г.
                    [firm] => Дентал
                    [country] => Україна
                    [type] => 1
                    [control] => по беномілу
                    [control_comment] => коментар
                    [priznachennja] => 3
                    [priznachennja_comment] => забороняється застосування
                    [danger_class] => 3
                )

// Динамично созданное:
            [1] => Array
                (
                    [id] => 103
                    [name] => sdfasdfasdf
                    [percent] => 0
                    [form] => 0
                    [firm] => asfsdafadsf
                    [country] => sadfsdfsad
                    [type] => 2
                    [control] => asdfasdgsdg
                    [control_comment] => 3qf34ferf
                    [priznachennja] => 8
                    [priznachennja_comment] => dsgegset
                    [danger_class] => 3
                )

)
А используя FireFox вот такое

Код:
 [preparate] => Array
        (
// Статическое поле:
            [0] => Array
                (
                    [id] => 89
                    [name] => Дерекс
                    [percent] => 17
                    [form] => в.г.
                    [firm] => Дентал
                    [country] => Україна
                    [type] => 1
                    [control] => по беномілу
                    [control_comment] => коментар
                    [priznachennja] => 3
                    [priznachennja_comment] => забороняється застосування
                    [danger_class] => 3
                )

// А ГДЕ ДИНАМИЧНО СОЗДАННОЕ!!!???
)

Кто знает где грабля заложена!?

Спасибо за любые мысли на эту тему.
Ответить с цитированием