แก้ปัญหา window.showModalDialog is not a function Turn Back
2016-09-06 12:09:07
Uncaught TypeError: window.showModalDialog is not a function
เป็นเพราะ Chrome ในเวอชั่นใหม่ๆ ได้เลิก support function นี้ ดังนั้น เราจึงต้องปรับเปลี่ยนวิธีการเปิด popup ใหม่
showModalDialog มีข้อดีคือ มันสามารถส่งตัวแปรไปรับค่าจาก popup แล้ว return มาใช้ได้เลย
แต่เมื่อ function นี้มันใช้ไม่ได้ เราจึงต้องหาฟังชั่นอื่นทดแทน
ผมเลือกใช้วิธีบ้านๆ ง่ายๆ นั่นคือ window.open เป็นพระเอกของเราในงานนี้ครับ
จากเดิมนะครับ
function returnValue(){
var val1;
var val2;
}function openPopup(){
newWindow = 'popup.html;if(window.showModalDialog( newWindow ,returnVal ,"dialogHeight:380px;dialogWidth:400px;center")==true){
somthing with returnVal;
alert(returnVal.val1);
alert(returnVal.val2);}
}
ส่วน function ที่นำมาใช้แทนตัวเดิมเป็นแบบนี้ครับ
<script>
function openPopup() {
newWindow = 'popup.html;
window.open(newWindow,'','Left=100,Top=100,width=400,height=380') ;
}</script>
<div id="result"></div>
แต่ฟังชั่นนี้ จะไม่ได้คืนค่ามายัง window ที่เป็น parent นะครับ ดังนั้นเราจะต้องให้ window ที่ popup ส่งค่ากลับมายัง parent
ผมเลือกใช้ jquery เพราะงานและรวดเร็วต่อการเรียกใช้งาน function ครับ
ส่วน method option ต่างๆ ของ window.open นั้น ศึกษาเพิ่มได้จากอาจารย์ของผมเลย http://www.w3schools.com/jsref/met_win_open.asp
มาดูการคืนค่าจาก popup.html กันต่อครับ
<html>
<head>
<script type="text/javascript" src="jquery.js"></script>
<script>
function sendData(){
Title = $('input[name=title]').val();
Desc = $('input[name=desc]').val();
// return ไปที่่ div #result$('#result',opener.document).empty().text( Title + ":" + Desc );
window.close(); // ปิด popup
}
</script>
</head>
<body><form>
<input type="text" name="title" />
<input type="text" name="desc" />
<button onclick="sendData()">OK</button>
</form></body>
</html>
ในปัจจุบัน ยังจะมี js framework สำเร็จรูปให้ใช้อย่าง modal ให้เลือกใช้อย่างหลากหลาย ก็แล้วแต่ความสะดวกของแต่ละท่านนะครับ
ขอให้สนุกกับการเขียนดปรแกรม
ขอบคุณครับ