【问题标题】:How to refresh drop-down list on parent page如何刷新父页面上的下拉列表
【发布时间】:2015-08-06 09:08:36
【问题描述】:

我在 PHP/HTML 页面上有一个下拉列表。我在它旁边有一个按钮,单击它会打开一个弹出窗口,通过它我可以将更多项目添加到下拉列表中(它存储在 mysql 表中)。当我关闭弹出窗口时,它应该触发一个事件,该事件又应该刷新父页面上的下拉列表。

怎么做?谢谢!

编辑:页面上有 2 个下拉列表。第二个 DDL 中的选项列表取决于在第一个 DDL 中所做的选择。在第二个 DDL 旁边,有一个按钮可以打开一个弹出窗口。使用 PPW 可以将选项添加到第二个 DDL(存储在 mysql 表中)。

现在弹出窗口选项工作正常,数据正在保存在表格中。现在对我来说唯一的选择是刷新页面。我希望在单击 PPW 上的关闭按钮时发生一个事件。此事件应刷新第一个 DDL,以使先前选择的选项保持选中状态。也可以这样做吗:我添加的数据应该在第二个DDL中选择。

代码

第一个 DDL

<td>State Name</td> 
<td><select id="a" name="a" onchange="ajax(this.value);">
<option value="">Select State Name</option>
<?php
$sql = "SELECT * FROM State";
$abc = mysql_query($sql);   
while($row = mysql_fetch_array($abc)){ 
echo "<option value=\"".$row['scode']."\">".$row['State']."</option>\n";}
?>
</select></td>

第二个 DDL

<td>School Name</td>
<td><select name="schname">
<option value="">Select School Name</option></select>
<A href="addsch.php?State=<?php echo $state?>&scode=<?php echo $scode?>"Target='_blank'>Add New School Name</a></td>

The ajax function named 'ab' does the refresh when 1st DDL is selected.

addsch.php 在弹出窗口中打开一个带有提交按钮的表单,该按钮将表单数据保存到 mysql 表中。

示例:我从 1st DDL 中选择“State1”,“State1”中的学校名称显示在 2nd DDL 中。我想添加一个学校名称(比如 'State2' 到 2nd DDL,所以我使用 add 选项。保存表单数据后,我希望 1st DDL 以这样的方式刷新,即 'State1' 保留在那里并且 2nd DDL 显示' State2'。否则至少要刷新第一个 DDL,然后用户可以自己从第二个 DDL 中选择“State2”。

如何做到这一点?

【问题讨论】:

  • 我已经编辑了我的问题并添加了代码

标签: php jquery html mysql ajax


【解决方案1】:

如果它存储在 MYSQL 表中,则系统无法在不实际刷新页面的情况下刷新下拉列表。如果我正确理解了所有内容,这可能会对您有所帮助:

Open popup and refresh parent page on close popup

如果您不想刷新页面而只想刷新下拉列表,那么您必须自己创建一个 AJAX 函数。

编辑:从外观上看,您最好不要刷新整个页面并执行一个 javascript 函数,该函数会将选项输入中的值存储到会话数组中,并且每次加载此页面时它都会查找这个价值。如果未设置密钥,则将选择第一个列表中的第一个选项。

快速浏览一下这个 js fiddle:

https://jsfiddle.net/98k456ho/1/

Needs jQuery

不幸的是,它使用 sessionStorage 时不起作用,但您可以将其粘贴到您的 php 文件中,它应该可以工作。

sessionStorage 类似于 localStorage 允许您存储可以快速访问的键/值“对象”。与简单的 cookie 相比,它允许您存储更多数据。

这段代码的作用是,每次您从列表中选择一个选项时,该值都会存储到会话数组中。每次加载页面时,它都会在会话中查找值,如果选择了第一个值或用户没有选择单个值,它将默认值设置为“选择”。

在您的情况下,如果用户选择例如“加利福尼亚”,他可以访问您的第二个列表中的所有选项。关闭弹出窗口后,因为所有内容都存储在会话中,所以一切都将相同。

需要注意的重要一点是,JavaScript 需要在您执行 mysql 查询之前运行,否则您的第一个下拉列表中的值将被选中,但您的第二个列表中将没有或错误的值。

【讨论】:

  • 是的,只刷新下拉列表。我不能在理论上对弹出窗口使用 onclick 事件,它应该只刷新父页面上的下拉菜单吗?
  • 当然可以。但是正如您所说,列表中的数据存储到数据库中,根据插入表中的内容刷新列表中的值的唯一方法是刷新整个父页面或通过发出获取/发布请求ajax 所以你只是刷新你的列表。假设您的列表中的值来自一个数组。 ajax 请求将返回新值,然后将替换您的第一个数组中的值。
  • 谢谢,但在此 DDL 之前还有其他元素(下拉菜单、文本框等)可供用户访问。
  • 然后您可以调整您的代码,以便根据用户选择的内容以及他在刷新前选择的内容来填充所有内容。这也是同样的思考过程。无论您采用哪种方式(ajax 与否),因为您想跟踪用户的选择,您必须将其选择存储在某处并“调整”您的刷新。
  • 好的,现在我被困在其他地方了。我使用 $_SESSION['xyz']=$_POST['xyz']; 临时存储表单变量当单击“添加学校名称”按钮时,会出现一个包含表单的新窗口。提交表单后,父页面会自动重新加载。我还在输入标签中使用 value="" 在输入框中显示会话变量。但是当页面刷新时,值不会保留。我做错了什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-06
  • 1970-01-01
  • 2012-07-03
  • 2019-12-30
  • 2012-11-18
相关资源
最近更新 更多