0

私がやりたいことは、フォームオブジェクトをどこかに保持し、後でサーバーに送信したいということです。フォームにテキスト/ラジオ/チェックボックスなどが含まれている場合は正常に機能しますが、ファイルアップロード用のフィールドがある場合、Internet Explorer では機能しません。

ここに例があります:

<div id="container">
  <form id="testForm">
    <input type="file" name="photo"/> 
  </form>
  <input type="button" onclick="uploadLater();"/>
</div>

function uploadLater()
{
   window.oldForm = document.getElementById('testForm');
   document.getElementById('container').innerHTML = "thanks!";
}

後で実行される別の関数は次のようになります (注: FF と Chrome では機能しますが、IE では機能しません。IE は残念ながらファイルを送信しません)。

function doItNow()
{
  if(!window.oldForm.parentNode) document.body.append(window.oldForm);
  // ... other parameters omitted ...
  window.oldForm.submit();
  window.oldForm.parentNode.removeChild(window.oldForm);

  alert('hurray! data on its way ...');
}

このようなものをIEで動作させるための解決策を知っている人はいますか? ファイルも含み、DOM ツリーの一部ではないフォームを一定の遅延後に送信する (クロス ブラウザー)。

どうも、

4

1 に答える 1

0

このようなものは機能しますか?フォームを非表示にして、フォームを表示しないままにします。次に、テキストを含む別の div を表示します。

これが作業コピーです:http://jsfiddle.net/KhJAt/

<div id="container">
  <div id="displayMessage" style="display:none;"></div>
  <form id="testForm">
    <input type="file" name="photo"/> 
  </form>
  <input type="button" onclick="uploadLater();" value="Click it"/>
</div>

function uploadLater()
{
   window.oldForm = document.getElementById('testForm');
   window.oldForm.style.display="none";
   document.getElementById('displayMessage').style.display="";
   document.getElementById('displayMessage').innerHTML = "thanks!";
}
于 2013-01-24T14:29:51.467 に答える