Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Скрипт перестал работать в новых версиях firefox, Opera и Chrome, а в IE работает (https://javascript.ru/forum/css-html/18406-skript-perestal-rabotat-v-novykh-versiyakh-firefox-opera-i-chrome-v-ie-rabotaet.html)

polbear 29.06.2011 14:02

Скрипт перестал работать в новых версиях firefox, Opera и Chrome, а в IE работает
 
Скрипт позволял загружать "неограниченное" количество картинок, налету генерируя новые формы, но всё накрылось! Скрипт-то работает, но вот браузеры при передаче обработчику теряют данные.
Код:

function dropFile(btn)
{
  if(document.getElementById)
  {
    while (btn.tagName != 'DIV') btn = btn.parentNode;
    btn.parentNode.removeChild(btn);
  }
}
function addFile(btn)
{
  if(document.getElementById)
  {
    while (btn.tagName != 'DIV') btn = btn.parentNode;
    var newTr = btn.parentNode.insertBefore(btn.cloneNode(true),btn.nextSibling);
        }
}

Код:

<div>
<table>
<tr>
<td>Большое фото</td>
<td>Маленькое фото
<input type="button" name="drop" value=" &minus; " onclick="dropFile(this);">
<input type="button" value=" + " onclick="addFile(this);">                                               
</td>
</tr>
<tr>
<td><input type="file" size="32" name="big[]"></td>
<td><input type="file" size="32" name="mini[]"></td>
</tr>
</table>
</div>

В PHP фотки принимает скрипт и обрабатывает массив
Код:

$_FILES['big']['name'][$i]
Проблема: В Internet Explorer всё работает как и раньше, а вот в других браузерах, после выхода новых версий, скрипт перестал передавать массив
Код:

[big] => Array
        (
            [name] => Array
                (
                    [0] =>
                    [1] =>
                )

            [type] => Array
                (
                    [0] =>
                    [1] =>
                )

а передает только первый файл, т.е. массив
Код:

[big] => Array
        (
            [name] => Array
                (
                    [0] =>
                )

            [type] => Array
                (
                    [0] =>
                )

Вопрос: Что изменилось в браузерах принципиально, как решить проблему, что читать?

nikita.mmf 29.06.2011 14:19

btn.nodeName.toLowerCase() != 'div'

polbear 29.06.2011 14:40

Спасибо. Вы правы, конечно, но скрипт и так работал, формы рисовал, просто по неведомой причине браузеры перестали понимать name="array[]" и не передают массивы...

Ещё одна радость!!! Попытался изменить имена: big1, big2 и т.д. но сгенерированные формы отказываются передавать данные файлов. Тогда я просто сгенерил обыкновенный input
var myInput = document.createElement('input');
myInput.setAttribute('type','text');
myInput.setAttribute('name','11111');
myInput.setAttribute('value','123456');
btn.appendChild(myInput);

Форма генерится. Отправляем. И видим, что переменная '11111' в массиве $_POST отсутствует! А в Internet Explorer опять всё работает!!!

polbear 30.06.2011 09:34

Всё проблема снята!
 
Тег формы находился так:
<table><form><tr>....</tr></form></table>
и после создания javascript'ом нового элемента формы закрывающий тег </form> по непонятным причинам исчезал, вообще пропадал, оставалось пустое место. (Понял, когда всё выделил и в firefox посмотрел "Исходный код выделенного фрагмента": новые формы есть, а тега </form> - нет). Написал так:
<form><table><tr>....</tr></table></form>
Всё стало работать как надо! Всем спасибо, за сочувствие и помощь.


Часовой пояс GMT +3, время: 12:37.