Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Неправильно работает в Опере
 
 автор: dirol   (16.08.2007 в 08:32)   письмо автору
 
 

нашол тут на форуме этот скрипт, все ок но вот в опере возникли проблемы.
выбераеш файл и в новой форме при добавлении ие будет уже выбран тот же самый файл. подскажите как это исправить?


<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=" &minus; " 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>"

  } 
?>

   
 
 автор: mihdan   (16.08.2007 в 10:30)   письмо автору
 
   для: 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">';

   
 
 автор: dirol   (17.08.2007 в 12:07)   письмо автору
 
   для: 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.

   
 
 автор: dirol   (17.08.2007 в 14:12)   письмо автору
 
   для: stimorol   (17.08.2007 в 13:13)
 

Спасибо за помощь!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования