【问题标题】:Html select option lost data after submit提交后HTML选择选项丢失数据
【发布时间】:2012-01-03 23:23:31
【问题描述】:

我有两个带有一些数据的选择选项:

<select id="S1" name="S1">
  <option value="id1">data1</option>
  <option value="id2">data2</option>
  <option value="id3">data3</option>
</select>

<select id="S2" name="S2">
  // data for selected value in S1
</select>

当我选择一个选项时,我使用数据进行提交以填充第二个选择选项,但是当我执行此提交时,我丢失了第一个选择选项的选定值。如何保留第一个选择的选定值?

更新:我使用 mod_plsql,即 plsql 程序中的 html 语言。

用光标我得到数据:

CURSOR c_departamento IS
SELECT *
FROM sib_s_lugares_geograficos
WHERE tipo ='DE';

在我用循环填充选择后:

htp.p(' 
<select name="opt_departamento" value="'||OPT_DEPARTAMENTO||'" style="width: 135px" >');
FOR regDep IN c_departamento LOOP
htp.p(
'<option selected value="' || regDep.codigo || '">' || regDep.descripcion || '</option>');
END LOOP;
END IF;
 </select>');

我提交是因为我有另一个游标来获取第二个选择的数据,当我提交时,mod_plsql 再次调用该过程并绘制 html,当它发生时我得到第二个的正确值选择但我丢失了为第一个选择的值。

【问题讨论】:

  • 什么平台?什么计算机语言?
  • 你在为你的服务器端脚本唱什么?
  • 所有平​​台,语言 mod_plsql。

标签: html plsql


【解决方案1】:

使用您选择的服务器端语言,您需要将selected="selected" 属性添加到选定的 S1 选项。

例如,如果用户选择 id2,则输出这个 HTML:

<select name="S1">
  <option value="id1">data1</option>
  <option value="id2" selected="selected">data2</option>
  <option value="id3">data3</option>
</select>

<select id="S2">
  // data for selected value in S1
</select>

在 PHP 中,你可以这样做:

<?php $s1 = isset($_POST["S1"]) ? $_POST["S1"] : null; ?>

<option value="id1"<?= $s1 == "id1" ? "selected" : "" ?>>data1</option>
<option value="id2"<?= $s1 == "id2" ? "selected" : "" ?>>data2</option>
<option value="id3"<?= $s1 == "id3" ? "selected" : "" ?>>data3</option>

不过,理想情况下,用于生成 select 的代码也会输出 selected 属性。

我不熟悉 PL/SQL,但 之类的 应该可以工作:

htp.p('<select name="opt_departamento" style="width: 135px">');
FOR regDep IN c_departamento LOOP
    htp.p('<option value="' || regDep.codigo || '"');
    IF regDep.codigo=OPT_DEPARTAMENTO THEN
        htp.p(' selected');
    END IF;
    htp.print('">' || regDep.descripcion || '</option>');
END LOOP;
htp.p('</select>');

【讨论】:

  • 谢谢,你说的! “你用来生成select的代码也会输出selected属性”,¡不知道mod_plsql怎么能输出selected属性!
  • 已编辑。这就是它的要点——我自己对 PL/SQL 并不熟悉。说得通? (另外,为什么要在 select 元素上输出一个值?)
  • 我正在输出,因为该值已提交给程序,例如,要进行插入,我将该值用作外键。
  • 感谢您的回答,在这种情况下它不起作用,但它有助于解决我程序的另一个问题。
【解决方案2】:

您需要为select 元素赋予name 属性。只有具有name 属性的字段才有助于发送到服务器的表单数据集。 id 属性不影响这一点。如果你愿意,你可以对这两个属性使用相同的值,例如

<select id="S1" name="S1">

【讨论】:

  • 我给了name属性,(在mod_plsql中)我使用属性名来共享数据给plsql变量,程序使用这个属性来获取html元素的数据。
【解决方案3】:

我不知道这是否是最好的方法,但它有效。

  1. 下载Jquery插件:

    Jquery cookie plugin

  2. 在元素中放置一个onclick事件,我使用一个输入元素:

    输入名称="btnaccion" onclick="setCookieDepartamento();" type="submit" value="ciudad"

  3. 它调用这个函数,将select的值保存在cookie中:

    函数 setCookieDepartamento(){
    var select = document.getElementById("opt_departamento");
    var valor = select.options[select.selectedIndex].value; $.cookie("departamento", 勇气); }

  4. 提交后调用该函数,获取保存的值并在select选项中设置:

    函数 getCookieDepartamento(){ var departamento = $.cookie("departamento"); var element = document.getElementById("opt_departamento"); element.value = 部门; $.cookie("departamento", null); }

  5. 就是这样!

提交前:

提交后:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-05
    • 1970-01-01
    • 2021-06-30
    • 2019-02-27
    • 2021-11-19
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    相关资源
    最近更新 更多