|
|
|
| нашол тут на форуме этот скрипт, все ок но вот в опере возникли проблемы.
выбераеш файл и в новой форме при добавлении ие будет уже выбран тот же самый файл. подскажите как это исправить?
<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);
thisChilds = newTr.getElementsByTagName('td');
for (var i = 0; i < thisChilds.length; i++)
{
if (thisChilds[i].className == 'files') thisChilds[i].innerHTML = '<input size="32" name="att[]" class=input type="file">';
}
}
}
//-->
</script>
<?php
// Обработчик HTML-формы
// Загружаем все файлы на сервер
for($i = 0; $i < count($_FILES['att']['name']); $i++)
{
// Перемещаем файл из временной директории сервера в
// директорию /files Web-приложения
if (copy($_FILES['att']['tmp_name'][$i], "files/".$_FILES['att']['name'][$i]))
{
// Уничтожаем файл во временной директории
unlink($_FILES['att']['tmp_name'][$i]);
// Изменяем права доступа к файлу
chmod("files/".$_FILES['att']['name'][$i], 0644);
}
}
// Осуществляем автоматическую перезагрузку страницы
// если содержимое суперглобального массива $_POST
// не является пустым
if(!empty($_POST))
{
echo "<HTML><HEAD>
<META HTTP-EQUIV='Refresh' CONTENT='0; URL=".$_SERVER['PHP_SELF']."'>
</HEAD></HTML>";
}
?>
|
| |
|
|
|
|
|
|
|
для: dirol
(16.08.2007 в 08:32)
| | Конечно переколбасили код Яндекса ;) Возьмите оригинал http://mail.yandex.ru | |
|
|
|
|
автор: stimorol (17.08.2007 в 11:05) |
|
|
для: dirol
(16.08.2007 в 08:32)
| | По теме.
Так что бы про быстрому, не вникая, замени строку
for (var i = 0; i < thisChilds.length; i++)
|
на строку
for (var i = 0; i < thisChilds.length-1; i++)
|
а строку
if (thisChilds[i].className == 'files') thisChilds[i].innerHTML = '<input size="32" name="att[]" class=input type="file">';
|
на строку
thisChilds[i].innerHTML = '<input size="32" name="att[]" class=input type="file">';
|
| |
|
|
|
|
|
|
|
для: stimorol
(17.08.2007 в 11:05)
| | stimorol
Спасибо, да так работает, а если java почищена вот так. Как с таким кодом так же сделать?
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');
}
}
|
| |
|
|
|
|
автор: stimorol (17.08.2007 в 13:13) |
|
|
для: dirol
(17.08.2007 в 12:07)
| | Никак.
Кнопкой [+] ты клонируешь объект TR, в котором находится нажатая кнопка.
А потом изменяешь его внутренний объект, если он класса file :
thisChilds[i].innerHTML = '<input size="32" name="att[]" class=input type="file">'
|
Предыдущая фишка, как я понял, была в том, что в Опере не срабатывала проверка
if (thisChilds[i].className == 'files')
|
А теперь ты просто клонируешь строку таблицы. А изменений внутри клона не производишь никаких.
В IE это прокатывает - добавляется строка без введенного текста.
А в Опере не прокатывает. Она клонирует строку с введенным текстом.
---------------------
И еще... Те изменения которые я тебе дал могут некорректно работать если ты изменишь структуру таблицы.
Короче, разбирайся с DOM. | |
|
|
|
|
|
|
|
для: stimorol
(17.08.2007 в 13:13)
| | Спасибо за помощь! | |
|
|
|