我有一个工作脚本,它将一个值从弹出页面传递到父页面。
流程是: ParentPage> ChildPage> ParentPage
我不得不更改我的小应用程序的流程,以在子页面上有一个'category select'选项。流程现在是: ParentPage> ChildPage1> ChildPage2> ParentPage
我的应用程序现在要求用户从弹出窗口中选择一个值。第一个弹出窗口将提供类别选择。选择一个类别后,类别产品将显示在下一页上。然后,用户从选项中选择产品,并将值传递给原始父页面。
我希望我已经准确地解释了我的问题。如何将所选值传递回原始父页面。如果我的父母页面被命名为parent.php,我可以将页面parent.php的ID硬编码到我的代码中:
window.opener.updateValue(parentId, value);
任何帮助都会受到赞赏。
我的工作代码和建议代码如下所示:
工作代码
parent.php
<html>
<head>
<title>test</title>
<script type="text/javascript">
function selectValue(id)
{
// open popup window and pass field id
window.open('child.php?id=' + encodeURIComponent(id),'popuppage',
'width=400,toolbar=1,resizable=1,scrollbars=yes,height=400,top=100,left=100');
}
function updateValue(id, value)
{
// this gets called from the popup window and updates the field with a new value
document.getElementById(id).value = value;
}
</script>
</head>
<body>
<table>
<tr>
<th>PACK CODE</th>
</tr>
<tr>
<td>
<input size=10 type=number id=sku1 name=sku1 ><img src=q.png name="choice" onClick="selectValue('sku1')" value="?">
</td>
</tr>
<tr>
<td>
<input size=10 type=number id=sku2 name=sku2 ><img src=q.png name="choice" onClick="selectValue('sku2')" value="?">
</td>
</tr>
</table>
</body>
</html>
child.php
<script type="text/javascript">
function sendValue(value)
{
var parentId = <?php echo json_encode($_GET['id']); ?>;
window.opener.updateValue(parentId, value);
window.close();
}
</script>
<table>
<tr>
<th>Pack Code</th>
</tr>
<tr>
<td>1111</td>
<td><input type=button value="Select" onClick="sendValue('1111')" /></td>
</tr>
<tr>
<td>2222</td>
<td><input type=button value="Select" onClick="sendValue('2222')" /></td>
</tr>
<tr>
<td>3333</td>
<td><input type=button value="Select" onClick="sendValue('3333')" /></td>
</tr>
</table>
提议的代码
parent.php
<html>
<head>
<title>test</title>
<script type="text/javascript">
function selectValue(id)
{
// open popup window and pass field id
window.open('child1.php?id=' + encodeURIComponent(id),'popuppage',
'width=400,toolbar=1,resizable=1,scrollbars=yes,height=400,top=100,left=100');
}
function updateValue(id, value)
{
// this gets called from the popup window and updates the field with a new value
document.getElementById(id).value = value;
}
</script>
</head>
<body>
<table>
<tr>
<th>PACK CODE</th>
</tr>
<tr>
<td>
<input size=10 type=number id=sku1 name=sku1 ><img src=q.png name="choice" onClick="selectValue('sku1')" value="?">
</td>
</tr>
<tr>
<td>
<input size=10 type=number id=sku2 name=sku2 ><img src=q.png name="choice" onClick="selectValue('sku2')" value="?">
</td>
</tr>
</table>
</body>
</html>
child1.php
<script type="text/javascript">
function sendValue(value)
{
var parentId = <?php echo json_encode($_GET['id']); ?>;
window.opener.updateValue(parentId, value);
window.close();
}
</script>
<form name="category" method="POST" action=child2.php>
<table>
<tr>
<td>Category</td>
</tr>
<tr>
<td>
<select name="category" id="category">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
</td>
</tr>
<tr>
<td>
<input type=submit value=next>
</td>
</tr>
</table>
Child2.php
<script type="text/javascript">
function sendValue(value)
{
var parentId = <?php echo json_encode($_GET['id']); ?>;
window.opener.updateValue(parentId, value);
window.close();
}
</script>
<?
$category=$_POST[category];
?>
<form name="selectform">
<table>
<tr>
<tr>
<th>Pack Codes for Category <? echo $category; ?></th>
</tr>
<tr>
<td>1111</td>
<td><input type=button value="Select" onClick="sendValue('1111')" /></td>
</tr>
<tr>
<td>2222</td>
<td><input type=button value="Select" onClick="sendValue('2222')" /></td>
</tr>
<tr>
<td>3333</td>
<td><input type=button value="Select" onClick="sendValue('3333')" /></td>
</tr>
</table>
我知道弹出页面在这种情况下不是理想的选项,但这是我的应用程序所在的位置。请告诉我如何更改子2的代码以指回parent.php页面。我的想法是改变下面的代码
<script type="text/javascript">
function sendValue(value)
{
var parentId = <?php echo json_encode($_GET['id']); ?>;
window.opener.updateValue(parentId, value);
window.close();
}
</script>
到这个代码(硬代码中的父ID - 这对于parent.php来说是什么)
<script type="text/javascript">
function sendValue(value)
{
var parentId = <?php echo json_encode($_GET['id']); ?>;
window.opener.updateValue('parent.php', value);
window.close();
}
</script>
非常感谢, 莱恩
答案 0 :(得分:2)
好的,这是我的架构主张的摘要:
主:
var oChild = window.popup('child1.php');
oChild.openerr = window;
child1.php:
var oWin = window.popup('child2.php');
oWin.category = document.getElementById('category').value;
oWin.openerr = window;
//here use window.openerr to access the parent (main)
child2.php:
var g_oXhr = new xmlHttpRequest();
g_oXhr.onreadystatechange = function() {
if (g_oXhr.readyState == 4 && (g_oXhr.status == 200)) {
//use g_oXhr.responseText or g_oXhr.responseXML
}
}
g_oXhr.open("POST", "mysql_query_elements_category.php", true);
g_oXhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8");
g_oXhr.send('0=' + encodeURIComponent(window.category));
//here use window.openerr to access the parent (child1)
我们走了: - )
答案 1 :(得分:1)
只是粗暴地回答这个问题,是的,你可以这样做:
window.opener.updateValue(parentId, value);
我个人使用这个系统: - 主窗口MAIN - 打开弹出窗口以获取类别POPUP - 从弹出窗口中选择一个值,以这种方式设置MAIN中的类别字段:
var oElem = window.opener.document.getElementById("myElementId");
oElem.value = '...';
希望它有所帮助!
ps:我没有尝试window.opener.opener
,但我不明白为什么它不起作用......
编辑: child2发布于:
$category=$_POST[category];
您可以像这样打开child2: 在child1:
wherever.onclick = function(e) {
var ochild2 = window.open('child2.php');
ochild2.category = document.getElementById('category').value;
}
并使用window.category
在javascript中从child2检索类别的值,而不是从php $category
获取。
请注意,在child2.php中,您不使用$ category变量。
希望有所帮助
而不是通过表格。