JavaScriptで動的に生成したform要素は明示的にDOMに追加しないとsubmitできない
jQueryで「ある要素をクリックしたらform要素を動的に生成してsubmitを実行」という処理をして、画面遷移させようとしました。
$('#hoge').click(function() { $('<form></form>') .attr('method', 'post') .attr('action', '/hoge') .submit(); });
簡単に書くとこんな感じ。
これをChromeで実行するときちんと動作します。なのでこれでいいや、と思っていたのですが、しかしこれをFirefoxで実行させるとsubmitが動作しません。ついでにIEでも動作しません。
何もコードは間違えてないはずなのにな・・・と思いつつ、少し考え、おもむろにform要素をbody要素に追加してみたところ、FirefoxとIEでもきちんと動作するようになりました。
$('#hoge').click(function() { $('<form></form>') .attr('method', 'post') .attr('action', '/hoge') .appendTo($('body:first')) .submit(); });
どうやら動的に生成したform要素は、明示的にDOMに追加されていないと動作しないようです。そういえば過去にも同じ現象で悩んだことがあったような気も…。
ここではjQueryで書きましたが、jQueryを使わずにJavaScriptで書く時も同様です。
コメントを残す