|
|
|
| здравствуйте. помогите решить проблему, ибо сам уже извелся весь. у меня есть три поля id | title | type , рядом 2 кнопочки + | - плюсом добавляется еще одно поле, минусом соответственно удаляется. эдакая динамическая вещь, которой можно создавать сколько угодно полей, задавай каждому id, title и выбирать тип type (выпадающий список): строка(~input type=text), текст(~textarea), число(~input type=text) и все это делаю serialize и пихаю в базу. суть проблемы в том что кнопочками поля создаются и удалются, все хорошо, но! при обработке он не передает массив этих полей. тоесть должен быть массив [property_id] => Array ( [ключ] => значение ) массив [property_title] => Array ( [ключ] => значение_title ) и массив [property_type] => Array ( [ключ] => значение_type ).
когда же кнопочки +\- не нажимаю и добавляю всего один элемент, все работает и пишется, обрабатывается. я вывел массив _REQUEST, короче тупо не передаются массивы эти значений, а когда одно это поле, тогда выдается, следовательно проблема в яваскриптном добавлении полей. поправьте пожалуйста.
<script language="javascript">
<!--
function addline() {
c=++document.getElementById('count').value;
s=document.getElementById('properties').innerHTML;
s=s.replace(/[\r\n]/g,'');
re=/(.*)(<tr id=.*>)(<\/table>)/gi;
re2=/\[\d+\]/gi;
s1=s.replace(re,'$2');
s2=s1.replace(re2,'['+c+']');
s2=s2.replace(/(readonly)/gi,'');
s2=s2.replace(/(rmline\()(\d+\))/gi,'$1'+c+')');
s=s.replace(re,'$1$2'+s2+'$3');
document.getElementById('properties').innerHTML=s;
}
function rmline(q) {
p = document.getElementById('property_id['+q+']').value;
rem = document.getElementById('rem_properties').value;
document.getElementById('rem_properties').value = rem + '|' + p;
s=document.getElementById('properties').innerHTML;
s=s.replace(/[\r\n]/g,'');
re=new RegExp('<tr id="?newline"? nomer="?\\['+q+'.*?<\\/tr>','gi');
s=s.replace(re,'');
document.getElementById('properties').innerHTML=s;
}
function property2rem (p) {
rem = document.getElementById('rem_properties').value;
document.getElementById('rem_properties').value = rem + '|' + p;
}
-->
</script>
...
<input type="hidden" name="count" id="count" value="0">
<input type="hidden" name="rem_properties" id="rem_properties" value="">
<span id="properties">
<table border=0 cellspacing=2 cellpadding=2 width="100%" class="editdata">
<tr>
<tr>
<td width="30%" style="font-size: 11px; color:#c0c0c0;">id:</td>
<td width="50%" style="font-size: 11px; color:#c0c0c0;">название:</td>
<td width="10%" style="font-size: 11px; color:#c0c0c0;">тип:</td>
<td width="10%" align="center"><div><spacer /></div></td>
</tr>
<tr id="newline" nomer="[0]">
<td width="30%"><input type="text" name="property_id[0]" id="property_id[0]" value="" style="width:100%"></td>
<td width="50%"><input type="text" name="property_title[0]" id="property_title[0]" value="" style="width:100%"></td>
<td width="10%">
<select name="property_type[0]" id="property_type[0]">
<option></option>
<option value="string">строка</option>
<option value="text">текст</option>
<option value="int">число</option>
</select>
</td>
<td valign="top"align="right"><input type="button" onclick="rmline(0)" value="-" style="width:22px"></td>
<td valign="top"align="left"><input type="button" onclick="addline()" value="+" style="width:22px"></td>
</tr>
</table>
</span>
|
| |
|
|
|
|
|
|
|
для: LimP
(02.05.2009 в 16:12)
| | Значится, так:
1. Добавление новых РЕАЛЬНЫХ элементов в существующую форму осуществляется ТОЛЬКО методами creatеElеment и appendChild. Всё прочее - от лукавого и, соответственно, в этом случае браузер может только ПОКАЗАТЬ новый элемент на странице, но РЕАЛЬНО там его НЕ БУДЕТ.
2. При создании нового элемента необходимо помнить, что браузер MSIE при этом ИГНОРИРУЕТ прямое указание элемент.name = 'чего-то'. Информацию об имени элемента для MSIE надо вносить непосредственно в метод creatеElеment.
Подробнее (с примером и описанием) смотрите здесь, где ищете сообщение от CNT (23.01.2008 в 13:11) - это мой старый никнейм на этом форуме - и далее по ветке. | |
|
|
|