摘要:JavaScript:window.showModalDialog的dialogArguments在FireFox與IE的問題
這次我又碰到靈異事件了,
IE玩window.showModalDialog,沒啥問題。
在FireFox玩,就出問題。
由於我需要開子視窗出來,
而在子視窗會按下Button後,傳回值給父視窗,而該Button會post back。
當你在FireFox,第一次還沒PostBack時使用dialogArguments是不會有問題的喔!
等你PostBack後,dialogArguments就變null了喔!(真是隨便玩玩就發現bug)
所以我必須解決這個問題:名為「FireFox的showModalDialog的dialogArguments為null的問題」
所以針對FireFox傳回值給父視窗必須用另一招解決。
以下是我的解法。(應該叫暴力解吧!)
開窗在IE與FirxFox都是一樣的
window.showModalDialog(url,window);
傳回值就有不同如下(使用JQuery)
按下Button PostBack並將值傳回(PostBack 寫入以下JavaScript)
$(document).ready(function() { if(window.dialogArguments!=null)//IE Use { window.dialogArguments.document.getElementById('CODE').value = $('#SELECTED_CODE').val() ; } else //FireFox Use { opener.window.document.getElementById('CODE').value = $('#SELECTED_CODE').val() ; } window.close(); });
========================================================================
後記
為了維護與修改方便。
目前改為以下方式實作
在head標籤內輸入下列內容
var ParentWindow;
$(document).ready(function() {
if ($.browser.msie)
ParentWindow = window.dialogArguments;
else
ParentWindow = opener.window;
});
</script>
在使用時改用以下方式實作
ParentWindow.document.getElementById('CODE').value = $('#SELECTED_CODE').val() ;
window.close();
});