0

フォーム要素を追加する appendchild-function があります。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>
4

3 に答える 3

0

フォームタグがどこにあるのか知りたいだけですか? テーブルタグの前後?同様の問題があり、フォームタグがテーブル内にありました。テーブルの外側にフォームタグを配置すると、すべて正常に機能しました。

サイトが機能しなくなりました。これが実際の例です。私はあなたのコードを使用しました。私が変更したのは2つだけ で、<input type="text" name="work[]" />代わりに1つの終了divタグ<input type="text" name="work" /> がありませんでした</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>
于 2011-07-14T21:47:11.570 に答える
0

問題を解決しました...

基本的に、私はこれを持っていました..

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

そして、これに変更..

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

Firefox は無効な html を好まないようです。

于 2011-07-19T02:32:39.387 に答える
0

PHP のフィールド名配列機能を使用して、フィールド名を追跡する必要を回避できます。次のようにフィールドに名前を付けるだけです。

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

PHP は、フォームが送信された後、各ファイル ボックスを $_FILES 配列の個別のメンバーとして処理します。これにより、ボックスの数や値を格納する非表示のフォーム フィールドを追跡するための余分なオーバーヘッドから解放されます。

file 要素の onclick を新しいファイル入力を追加するものにすることを再検討することをお勧めします。誰かが「参照」ボタンをクリックしてファイルを追加するとどうなりますか? 1 つしか必要としていない場合でも、新しいファイル入力ボックスが表示されます。間違ったファイルを選択したり、後で気が変わったりして、[参照] をもう一度クリックしてファイルの選択を変更すると、さらに別の入力ボックスが表示されます。

代わりに、専用の「別のボックスを追加」ボタンを用意することを検討してください。

于 2011-07-14T19:23:45.203 に答える