Appendchild не публикует данные формы в Firefox - PullRequest
0 голосов
/ 14 июля 2011

У меня есть функция appendchild, которая добавляет элементы формы. В IE все работает нормально; process.php может $_POST это. Но в Firefox данные не отправляются.

Вот мой код.

<script type="text/javascript">
        var i=0;

        function addElement()
        {
            var ni = document.getElementById('org_div1');
            var numi = document.getElementById('theValue');
            var num = (document.getElementById('theValue').value -1)+ 2;
            numi.value = num;
            var newDiv = document.createElement('div');
            var divIdName = num;  newDiv.setAttribute('id',divIdName);

            newDiv.innerHTML = '<input type="text" name="work" /><input type="file"
class="fileupload" size="80" name="file' + (num) +'" onclick="addElement()"/> <a
  class="removelink" onclick=\'removeElement('+divIdName+')\'>Remove This File</
a>';

            // add the newly created element and it's content into the DOM
            ni.appendChild(newDiv);
        }

        function removeElement(divNum)
        {
            var d = document.getElementById('org_div1');
            var olddiv = document.getElementById(divNum);

            d.removeChild(olddiv);
        }

</script>

<td>
    <div class="file_input_wrapper">        
        <input type="hidden" value="1" id="theValue" />
        <div id='org_div1'>
            <input type="file" class="fileupload" name="file1" size="80" onclick="addElement()" />
        </div>
</td>

Ответы [ 3 ]

0 голосов
/ 15 июля 2011

Просто хотите спросить, где находится тэг формы? До или после табличного тега? У меня была похожая проблема, и мой тег формы был внутри таблицы. Когда я помещал тег формы за пределы таблицы, все работало нормально.

Сайт больше не работает. Вот рабочий пример. Я использовал твой код. Я изменил только две вещи <input type="text" name="work[]" /> вместо <input type="text" name="work" /> и вам не хватает одного </div> закрывающего тега div

вот код (проверено на IE7, IE8, FF и google chrome)

<?php
if (!empty($_POST['btnProsledi'])){
print_r($_POST);
echo "<br />";
print_r($_FILES);
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Untitled</title>
<script type="text/javascript">
    var i=0;

    function addElement()
    {
        var ni = document.getElementById('org_div1');
        var numi = document.getElementById('theValue');
        var num = (document.getElementById('theValue').value -1)+ 2;
        numi.value = num;
        var newDiv = document.createElement('div');
        var divIdName = num;  newDiv.setAttribute('id',divIdName);

        newDiv.innerHTML = '<input type="text" name="work[]" /><input type="file"  class="fileupload" size="80" name="file' + (num) + '" onclick="addElement()"/> <a class="removelink" onclick=\'removeElement(' + divIdName + ')\'>Remove This File</a>';

        // add the newly created element and it's content into the DOM
        ni.appendChild(newDiv);
    }

    function removeElement(divNum)
    {
        var d = document.getElementById('org_div1');
        var olddiv = document.getElementById(divNum);

        d.removeChild(olddiv);
    }

</script>

</head>
<body>
<form method="post" action="" enctype="multipart/form-data">
  <table>
<tr>
    <td>
    <input name="proba" type="text" id="proba" value="" />
    </td>
</tr>
<tr>
    <td>
<div class="file_input_wrapper">        
    <input type="hidden" value="1" id="theValue" />
    <div id='org_div1'>
        <input type="file" class="fileupload" name="file1" size="80" onclick="addElement()" />
    </div>
    </div>
</td>

</tr>
<tr>
    <td>
    <input name="btnProsledi" type="submit" id="btnProsledi" value="Submit" />
    </td>
</tr>
 </table>
 </form>
</body>
</html>
0 голосов
/ 19 июля 2011

Решил проблему ...

В принципе, у меня было это ..

<div>
<form>
</div>
</form>

И поменял на это ..

<form>
<div>
</div>
</form>

Кажется, что Firefox не любит недействительный HTML.

0 голосов
/ 14 июля 2011

Вы можете использовать функциональность массива имен полей PHP, чтобы обойти необходимость отслеживать имена полей. Просто назовите это поле так:

<input type="file" name="files[]" ... />
                              ^^--- array notation

и PHP будет обрабатывать каждое поле файла как отдельный элемент в массиве $ _FILES после отправки формы. Это освобождает вас от лишних затрат на отслеживание количества ящиков и скрытых полей формы для хранения значения.

Возможно, вы захотите пересмотреть вопрос о том, чтобы при нажатии на элемент файла был добавлен новый файл. Что произойдет, если кто-то нажмет кнопку «Обзор», чтобы добавить файл? Они получат новое поле ввода файла, хотя, возможно, они хотели только один. Если они выберут неправильный файл или передумают позже и снова нажмут кнопку «Обзор», чтобы изменить выбор файла, они получат еще одно поле ввода.

Подумайте о выделенной кнопке "добавить еще один ящик".

...