2012-01-02 53 views
2

後,我有一些數據的兩個選擇選項:HTML選擇選項丟失的數據提交

<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 languaje。

使用遊標我得到的數據:

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,當它發生時,我得到第二個選擇的正確值,但是我失去了爲第一個選擇的值。

+0

什麼平臺?什麼電腦語言? – Oded 2012-01-02 18:28:03

+0

你爲服務器端腳本編寫了什麼? – 2012-01-02 18:29:20

+0

所有plataforms,語言mod_plsql。 – 2012-01-02 18:49:41

回答

0

我不知道這是否是最好的方法,但它的工作原理。

  1. 下載的jQuery插件:

    Jquery cookie plugin

  2. 在要素投入了onclick事件,我使用的是input元素:

    輸入名稱= 「btnaccion」 的onclick = 「setCookieDepartamento();」類型= 「提交」 值= 「城」

  3. 它調用這個函數,節省了選擇的值在cookie:

    功能setCookieDepartamento(){
    VAR選擇=文件。的getElementById( 「opt_departamento」);
    var valor = select.options [select.selectedIndex] .value; $ .cookie(「departamento」,valor); }

  4. 調用此函數後提交,所獲得的價值保存和選擇選項設置:

    功能getCookieDepartamento(){VAR =阿雅$ .cookie( 「阿雅」); var element = document.getElementById(「opt_departamento」); element.value = departamento; $ .cookie(「departamento」,null); }

  5. 這就是全部!

之前提交: Before

提交後: After

2

使用您選擇的服務器端語言,您需要將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還會輸出選定的屬性。

我不熟悉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>'); 
+0

謝謝,你說的! 「你用來生成select的代碼也會輸出選擇的屬性」,¡我不知道mod_plsql如何輸出選定的屬性! – 2012-01-02 19:14:34

+0

已編輯。這是它的要點 - 我自己並不熟悉PL/SQL。合理? (另外,爲什麼你要在select元素上輸出一個值?) – benesch 2012-01-02 22:32:27

+0

我在輸出,因爲值是提交給過程的,例如,爲了創建一個Insert,我使用這個值就像一個前面的鍵。 – 2012-01-03 14:40:06

0

你需要給select元素name屬性。只有name屬性的字段纔有助於發送到服務器的表單數據集。 id屬性不影響此。如果你願意,你可以對這兩個屬性使用相同的值,例如

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

我給名稱屬性,(在mod_plsql中)我使用屬性名來共享數據到plsql變量,程序使用這個屬性來獲取html元素的數據。 – 2012-01-02 19:05:38