jQuery.ajaxSubmit()実行後、元画面が表示された時にPIE_IE678.js内でエラーが出る
以前、jQuery Form Pluginで画像ファイルをアップロードするプロジェクトを作りました。
struts+jQuery Form Pluginを使ったファイルアップロード① - わたしの日記だよ
このプロジェクトは、CSSでボタンの角を丸くする処置が入っていて
かつ、IE8標準対応だったので、CSS3 PIEという
CSS非対応のブラウザに対して、がんばってCSSの表示を再現してくれるライブラリ(JavaScript版)を使っていました。
CSS3 PIEについてはこちら:CSS3 PIE: CSS3 decorations for IE
初回読み込み時は、問題ないのですが
jQuery.ajaxSubmit()実行後、元の画面が再読み込みされると
1242行目のel.getBoundingClientRect()のところでUnspecifiedエラーが出てしまいます。
◯解決方法
jQuery.ajaxSubmit()が実行される前に、PIE.attachを
jQuery.ajaxSubmit()実行後に、PIE.detachを呼んであげるだけでOKでした。
例えばこんな感じ。
$('form').ajaxSubmit({ 'target': "body", 'beforeSubmit': function(formData, jqForm, options) { // 送信前に、PIEの適用をはずす $('.btn').each(function(){ PIE.detach(this); }); }, 'success': function(filename) { // 戻ってきたら、PIEの適用する $('.btn').each(function(){ PIE.attach(this); }); } });
最初、target(サーバからのレスポンス出力先)を指定しているため、
普通にページ読み込みしたときと違って、PIEの処理のタイミングがずれてしまっているのかなと思い
PIEライブラリの読み込みを<header>ではなく<body>でしてみたり、
ライブラリ内でログを出しまくってページ読み込み時との差分を探したり、
見当外れなことばかりしていました。
使い方調べろ!!って話だった。。。