|
|
|
|
function dropFile(btn)
{
if(document.getElementById)
{
while (btn.tagName != 'TR') btn = btn.parentNode;
btn.parentNode.removeChild(btn);
}
}
function addFile(btn)
{
if(document.getElementById)
{
while (btn.tagName != 'TR') btn = btn.parentNode;
var newTr = btn.parentNode.insertBefore(btn.cloneNode(true),btn.nextSibling);
thisChilds = newTr.getElementsByTagName('td');
for (var i = 1; i < thisChilds.length; i++)
{
if (thisChilds[i].className == 'files') thisChilds[i].innerHTML = '<input size="32" name="att['+i+']" class=input type="file">';
}
}
}
|
он мне так нравится, я его во все админки пихаю. а юзеры-ламеры работают (делают вид, что работают) в FF. поля в форме добавляются, а скрипт-обработчик в FF видит только 1 файл, первый, грузит его, а про остальные забывает... сделала, что у основного поля индекс 0. а добавленные поля начинаются с индекса 1. все равно не работает. что делать-то? | |
|
|
|
|
|
|
|
для: elenaki
(04.01.2010 в 16:58)
| | Т.е. сначала Вы пробовали просто att[] ?
Файрбагом смотрели, как создается то эти инпуты? | |
|
|
|
|
|
|
|
для: ddhvvn
(04.01.2010 в 20:26)
| | да. сначала были пустые скобки. не закачивает. делаю вывод массива $_FILES["name"][$i], но там только одно значение - первого файла, того, который был выбран в "стационарном" поле типа file. из полей, добавляемых кнопками +, ничего не запоминается. в IE проблем нет.
странно. сейчас проверила дома на локальном хосте - работает и в FF.
зачем там этот цикл? for (var i = 1; i < thisChilds.length; i++)
и без него работает. | |
|
|
|
|
|
|
|
для: elenaki
(04.01.2010 в 20:30)
| | =)))
>зачем там этот цикл? for (var i = 1; i < thisChilds.length; i++)
>и без него работает.
у автора нужно спросить )) | |
|
|
|
|
|
|
|
для: ddhvvn
(04.01.2010 в 23:21)
| | на работе не работает!
все отличие в скриптах - в том, что на работе я передаю данные в другой файл, а в тестовом обработка делается в нем же.
перенесла обработку в файл с формой. НЕ работает! что еще придумать? черт бы побрал этот FF, столько времени теряю на ерунду! | |
|
|
|
|
|
|
|
для: elenaki
(05.01.2010 в 10:50)
| | упростила скрипт, на сервере работает. мой - не работает! все тоже самое! аааааа! я счас с ума сойду!
<form enctype='multipart/form-data' method=post>
<table>
<tr>
<td><input type="file" size="32" name="att[]" class=input></td>
<td><input type="button" name="drop" value=" − " onclick="dropFile(this);">
<input type="button" value=" + " onclick="addFile(this);"></td>
</tr>
</table>
<input class=button type=submit value='Загрузить'>
</form>
<script language='JavaScript1.1' type='text/javascript'>
function dropFile(btn)
{
if(document.getElementById)
{
while (btn.tagName != 'TR') btn = btn.parentNode;
btn.parentNode.removeChild(btn);
}
}
function addFile(btn)
{
if(document.getElementById)
{
while (btn.tagName != 'TR') btn = btn.parentNode;
var newTr = btn.parentNode.insertBefore(btn.cloneNode(true),btn.nextSibling);
}
}
</script>
<?php
// Обработчик HTML-формы
print_r($_FILES['att']['name']); exit;
for($i = 0; $i < count($_FILES['att']['name']); $i++)
{
// tyt delaem chto-to s faylami
}
// Осуществляем автоматическую перезагрузку страницы
// если содержимое суперглобального массива $_POST
// не является пустым
if(!empty($_POST))
{
echo "<HTML><HEAD>
<META HTTP-EQUIV='Refresh' CONTENT='0; URL=".$_SERVER['PHP_SELF']."'>
</HEAD></HTML>";
}
?>
|
сделала все как в примере - сначала форма, потом скрипт JS, потом обработка на РНР, потом перезагрузка страницы... кстати, зачем нужна эта перезагрузка? у меня и без нее выдает:
Array ( [0] => 685.jpg [1] => ato04.jpg [2] => fw935s.jpg )
а если мне после обработки формы надо на другую страницу? | |
|
|
|
|
|
|
|
для: elenaki
(05.01.2010 в 12:13)
| | что-то Вы, видимо, запутались. да и я немного )
последняя перезагрузка нужно, вероятно, чтобы при обновлении страницы, файлы не отправились заново | |
|
|
|
|
|
|
|
для: ddhvvn
(05.01.2010 в 12:35)
| | убрала. сделала переадресацию на нужную мне страницу. переадресацию делает, т.е. массив POST имеется. а вместо массива FILES видит только одно значение, динамически добавленные замечать не желает. | |
|
|
|
|
|
|
|
для: elenaki
(05.01.2010 в 13:34)
| | так стоп. а что вообще за переадресация? зачем она Вам? | |
|
|
|
|
|
|
|
для: ddhvvn
(05.01.2010 в 15:46)
| | переадресация ни при чем. просто это единственное отличие в тестовом скрипте и моем. проблема в том, что скрипту-обработчику не передается массив, созданный через динамически добавленные поля. | |
|
|
|
|
|
|
|
для: elenaki
(05.01.2010 в 16:22)
| | ну значит она - виновница этого )))
эта переадресация ведь происходит после обработки файлов?
вы, кстати, так и не ответили - смотрели ли Вы как создаются новые поля? | |
|
|
|
|
|
|
|
для: ddhvvn
(05.01.2010 в 18:54)
| | понятия не имею, как это смотреть...
дело не в браузере. и не в переадресации. простой тестовый скрипт работает. мой, сложный, в котором еще куча других скриптов - нет. наверно, происходит конфликт с другими скриптами. | |
|
|
|
|
|
|
|
для: elenaki
(06.01.2010 в 12:40)
| | установите firebug и нажмите F12 =)
и после нажатий кнопки смотрите, добавляются ли поля, как они добавляются. и проверяйте есть ли ошибки. | |
|
|
|
|
|
|
|
для: elenaki
(05.01.2010 в 12:13)
| | у меня этот код работает: массив заполняется соответственно выбранным файлам. Значит дело в самом ФФ. Вы не пробовали обновиить его? | |
|
|
|
|
|
|
|
для: Boeing
(05.01.2010 в 23:28)
| | не работает, если поля типа файл расположены во втором столбце таблицы - т.к. форма большая, пришлось ее делить на столбцы...
перенесла эти динамически добавляемые поля в первый столбец и заработало! | |
|
|
|
|
|
|
|
для: elenaki
(07.01.2010 в 17:05)
| | хи-хи. я умудрилась в очередной раз сломать (как объяснить клиентам-ламерам, что если что-то работает, это не надо трогать, чтоб не сломать?) работающий в обоих браузерах скрипт. :)
клиенту захотелось, чтоб по кнопке [-] самая первая таблица с полями ввода фотки не пропадала. а по кнопке плюс добавлялись бы другие таблицы.
пришлось убрать минус из основной таблицы. а в дополнительных рисовать только минус. вот, что получилось. специально тут оставляю код, чтоб найти потом при случае. исходные данные: очень большая (динамически строящаяся форма), содержащая в себе таблицу из нескольких столбцов. ближе к концу формы расположена таблица с полями для ввода файла и двумя текстовыми полями. задача: добавлять сколько угодно таких таблиц с возможностью удаления и корректная обработка в IE и FF.
вот кусок формы:
<fieldset class="text" style="width: 355px;">
<legend>Фотографии</legend>
<table width="100%" align="center" cellspacing="1" class="text" border="0">
<tr>
<td valign="middle" style="border-bottom: #999 1px solid;">Фотография
<input type=file name="att[]" size=27 style="border: 1px #999 solid; background: #fff;">
порядок <input type="Text" name="ord[]" value="0" style="width: 25px;">
название <input type="Text" name="tit[]" value="" style="width: 156px;">
<span>
</td></tr>
</table>
<div align="right"> <input type="button" value="" onclick="addFile(this);" style="background: url('images/plus.gif') no-repeat; border: none; width: 12px; height: 12px; cursor: pointer;"></div>
</fieldset>
|
а вот скрипт добавления:
<script language='JavaScript1.1' type='text/javascript'>
var clk = 0
function dropFile(btn)
{
if(document.getElementById)
{
while (btn.tagName != 'TR') btn = btn.parentNode;
btn.parentNode.removeChild(btn);
}
}
function addFile(btn)
{
clk++;
btn = btn.parentNode;
var newElem=document.createElement("table");//создаём новый элемент страницы (TABLE)
newElem.border=1;//указывает толщину рамки таблицы
newElem.width = 350;
newElem.Cellspacing = 0
newElem.Cellpadding = 0
var newRow=newElem.insertRow(0);//добавляем строку в созданной таблице
var newCell = newRow.insertCell(0);//в созданной строке добавляем столбец
//newCell.width="200";//указываем длину столбца равной 200 пикселей
newCell.align="left";//указываем позиционирование по центру
newCell.innerHTML='Фотография <input type=file name="att['+clk+']" size=27 style="border: 1px #999 solid; background: #fff;"><br>порядок <input type="Text" name="ord['+clk+']" value="0" style="width: 25px;"> название <input type="Text" name="tit['+clk+']" value="" style="width: 156px;"> <input type="button" name="drop" value="" onclick="dropFile(this);" style="background: url(\'images/minus.gif\') no-repeat; width: 12px; height: 12px; border: #000 1px solid;">';
btn.parentNode.appendChild(newElem);//прописываем созданную таблицу на страницу
return
}
</script>
|
в главной таблице оставлен только плюс, удалить ее нельзя. в добавляемых таблицах - только минусы, их можно удалить. | |
|
|
|