2009-02-26 8 views
0

Ich versuche, auf eine Dropdown-Liste von einer Seite zuzugreifen, die von SQL Server Reporting Services mithilfe von JavaScript erstellt wurde. Normalerweise würde ich nur getElementById bekommen, aber die Attribute id und name für das Drop-Down-Element werden vom Server generiert, so dass ich das nicht verwenden möchte, um auf das Element zu verweisen. Wenn sich das Design der Seite in Zukunft ändert, wird es die Elemente _ct105 oder _ct107Feld von SQL Server Reporting Services abrufen Seite

benennen. Das einzige, was ich auf der Seite spezifiziere, ist das Label "Business Period". Ich dachte daran, Xpath zu verwenden, um diese Spanne zu referenzieren, und dann eine relative Position zum nächsten Auswahlelement zu verwenden, aber ich kann nicht herausfinden, wie das geht.

Idealerweise könnte ich die ID oder den Namen (oder jedes andere Attribut) des Select-Elements selbst angeben. Ist das möglich?

Ich werde jQuery auf der Seite verwenden, also wenn jemand eine gute Möglichkeit finden kann, es so zu finden, wäre es großartig.

<tr IsParameterRow="true"> 
<td class="ParamLabelCell"> 
    <span>Business Period</span> 
</td> 
<td class="ParamEntryCell" style="padding-right:0px;"> 
    <div> 
     <select name="ctl140$ctl00$ctl03$ddValue" id="ctl140_ctl00_ctl03_ddValue"> <!-- This is the select box I want --> 
      <option value="0">&lt;Select&nbsp;a&nbsp;Value&gt;</option> 
      <option value="1">Customer</option> 
      <option value="2">Previous&nbsp;Week</option> 
      <option value="3">Current&nbsp;Week</option> 
      <option value="4">Next&nbsp;Week</option> 
     </select> 
    </div> 
</td> 

Antwort

2

Wenn Sie bereits jQuery verwenden, dann wird XPath übertrieben sein. Ich sehe ein paar verschiedene Ansätze, um es in jQuery zu verstehen. jQuery verwendet CSS-Selektoren, so das ist, wie alle diese Arbeit:

/* this attaches to selectboxes, which are in a div, 
* which is in a [TD] with class ParamEntryCell 
*/ 
$("td.ParamEntryCell div select"); 
/* selects a selectbox whose id attribute starts with "ctl" 
    * in an element with class ParamEntryCell 
    */ 
$(".ParamEntryCell select[name^='ctl']") 
$("td.ParamEntryCell div select"); 
/* selects a selectbox whose id attribute starts with "ctl" 
    * in an element with class ParamEntryCell 
    */ 
$(".ParamEntryCell select[id^='ctl']") 

Dann, eines von diesen zu verwenden, würden Sie einfach jQuery Build in Methoden verwenden:

$(".ParamEntryCell select[id^='ctl']").change(function(){ 
    var val = $(this).val(); 
    alert(val); 
}) 
+0

Wie bekommen Sie diese in den Bericht eingespritzt? –

+0

David, das ist ein Stück JavaScript. Dies würde davon abhängen, dass jQuery und meine Skript-In-Page mit Skript-Tags und einem Mechanismus zur Verzögerung der Ausführung bis das DOM geladen wurde. – artlung

Verwandte Themen