neunundsiebziger: Selektierten Wert einer Dropdown-Box auslesen

Hallo Zusammen,

ich arbeite mit einem SAP Webreportingtool. In meinem Bericht werden zunächst über mehrere kaskadierend zusammenhängende Dropdownboxen Selektionen vorgenommen und anschliessend die Daten entsprechend aufgerufen.
Wenn ein bestimmter Wert (All) der ersten DDBox gewählt wird, soll die zweite DD-Box ausgeblendet werden (in meinem Beispiel durch einfachen Text ersetzt).
Mein Problem: Wenn der Bericht im Web ausgeführt wird, wird das HTML entsprechend generiert. Die IDs und Namen der Elemente, z.b. forms, wird aber jedes mal neu generiert, d.h. mal ist die ID "_3", mal "_6" usw. Ich kann also <form> und <select> nicht per ID oder Name ansprechen. Ich habe also einen <div>-Container um die DD-box gelegt (dummerweise wird auch noch ein span um die DDBox generiert) und eine ID zugewiesen und versuche nun per .firstChild auf die Optionswerte zuzugreifen. Vereinfacht sieht meine (nicht funktionierende) Lösung so aus (die alerts und der Button sind nur zum Test verwendet):

  
<html>  
<script type="text/javascript">  
function Ausgabe(){  
var dbb = document.getElementById("sbsc").firstChild.firstChild;  
//2x .firstChild, da erst der span, dann das form gewählt wird  
value = dbb.options[dbb.selectedIndex].value;  
 if (value == "!ALL"){  
  alert("All gewählt")  
  document.getElementById("text").style.visibility = "hidden";  
}else {  
alert("Anderer Eintrag");  
}  
}  
</script>  
<body>  
<table>  
<TD><div id="sbsc"><span id="SAP_BW_SNIPPET240">    <form  id="_67" method="POST" name="DDOWNBOX_67" action="/sap/bw/BEx"  >  
      <input   name="ITEM" id="ITEM_0" type="HIDDEN"      value="DD_SEL_BSC"  >    </input>  
      <input   name="FILTER_IOBJNM_1" id="FILTER_IOBJNM_1" type="HIDDEN"      value="YBSCCSCOR"  >    </input>  
      <input   name="FILTER_COLLAPSE" id="FILTER_COLLAPSE_0" type="HIDDEN"        >    </input>  
      <input   name="PAGENO" id="PAGENO_0" type="HIDDEN"      value="40"  >    </input>  
      <input   name="REQUEST_NO" id="REQUEST_NO_0" type="HIDDEN"      value="2"  >    </input>  
      <input   name="SAP-LANGUAGE" id="SAP-LANGUAGE_0" type="HIDDEN"      value="EN"  >    </input>  
       <select name="FILTER_VALUE_1" id="E395004C2B90E74EE10000000A32D93E" class="SAPBexDdl" onChange="document.DDOWNBOX_67.submit()" size="1"   >  
        <option value="!ALL"  > (All) </option>  
        <option value="R000000555"  > _AK_001 </option>  
        <option value="R000000556"  > _AK_002 </option>  
        <option value="R000000557"  > _AK_003 </option>  
        <option value="R000000558"  > _AK_004 </option>  
    </select>  
    </form>  
</span>  
</div>  
</td>  
</table>  
<form>  
   <input type="button" value="Bitte hier drücken" onclick="Ausgabe()">  
</form>  
<div id="text">Nicht "All" ausgewählt</div>  
</body>  
</html>  

leider passiert im Moment gar nichts. Ich bin auch bei Weitem noch kein JS-Jedi, habe mir alles die letzten Tage angelesen. Kann mir jemand helfen?
Vielen Dank vorab ;)

  1. Hi,

    ich arbeite mit einem SAP Webreportingtool.

    Da ich weiß, wie von SAP-Software generiertes HTML aussieht: Mein Beileid!

    Mein Problem: Wenn der Bericht im Web ausgeführt wird, wird das HTML entsprechend generiert. Die IDs und Namen der Elemente, z.b. forms, wird aber jedes mal neu generiert, d.h. mal ist die ID "_3", mal "_6" usw. Ich kann also <form> und <select> nicht per ID oder Name ansprechen. Ich habe also einen <div>-Container um die DD-box gelegt (dummerweise wird auch noch ein span um die DDBox generiert) und eine ID zugewiesen und versuche nun per .firstChild auf die Optionswerte zuzugreifen.

    firstChild und auch alle anderen Zugriffsweisen, bei denen du auf absolut exakte Kenntnis der Position von Elementen (und ggf. Textknoten dazwischen) im DOM angewiesen bist, sind für sowas eher schlecht geeignet.

    Vermutlich kommst du wesentlich entspannter ans Ziel, wenn du entweder über die forms- und elements-NodeLists zugreifst, oder getElementsByTagName nutzt. Letzteres kannst du nicht nur auf document anwenden, sondern auch auf ein beliebiges anderes HTML-Elementobjekt, um bspw. nur die Options oder Select-Felder innerhalb deines DIV-Elementes anzusprechen.

    MfG ChrisB

    --
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]