这阵子在开发php项目,对于传值最多的方式是用request获取。但是如果我要在一个页面(a页面)中点击按钮弹出一个另外一个页面(b页面),同时希望b页面中回调的值可以传递到a页面中,且在a页面的request变量中可以获取。
1)a页面的内容
<html> <head> <mce:script language="javascript" type="text/javascript"><!-- function GoSubmit(val) { alert("GoSubmit"); document.getElementById("condiotionName").value = val; } function Show(obj) { var myObject = new Object(); myObject.callBackFunction = GoSubmit; window.showModalDialog("b.html",myObject); if (document.getElementById("condiotionName").value != "") { document.getElementById("__EVENTAUGUMENT").value="showdialog"; document.getElementById("__EVENTAUGUMENT2").value="Click"; document.getElementById("__CauseValidation").value="True";alert(document.getElementById("condiotionName").value); if(obj.type!="submit"){ document.forms[0].submit(); } } } // --></mce:script> </head> <body> <form name="aaa" id="aaa"> <input id="test" name="test" type="text" value="aaa"> <input type="button" name="showdialog" value="showmodaldialog" onclick="Show(this);"> <input type="hidden" id="condiotionName" value=""> <input type="hidden" name="__EVENTAUGUMENT" id="__EVENTAUGUMENT"/><input type="hidden" name="__EVENTAUGUMENT2" id="__EVENTAUGUMENT2"/><input type="hidden" name="__EVENTAUGUMENT3" id="__EVENTAUGUMENT3"/><input type="hidden" name="__CauseValidation" id="__CauseValidation"/> </form> </body> </html>
php中没有事件驱动模式,所以要自己手动添加事件驱动模式。用了window.showModalDialog的方式来掉出一个模态窗口。
通过myObject.callBackFunction 的方式来得到b页面传递过来的值,并且赋给页面上的某个元素
2)b页面的内容
<html> <head> <mce:script language="javascript" type="text/javascript"><!-- function Show() { var obj = window.dialogArguments; alert(document.getElementById("test").value); obj.callBackFunction(document.getElementById("test").value); window.close(); } // --></mce:script> </head> <body> <form name="aaa" id="aaa"> <input id="test" name="test" type="text" value="bbb"> <input type="button" value="showmodaldialog" onclick="Show();"> </form> </body> </html>
通过回调函数传递文本框的值给a页面。
注:页面中有很多alert事件是用于测试的,不喜欢的可以去掉。
3)逐步调试php,你可以发现request里面可以取到b页面文本框的值。