2009-02-26 6 views
0

J'essaie d'accéder à une zone de liste déroulante à partir d'une page créée par SQL Server Reporting Services à l'aide de JavaScript. Normalement, j'obtiendrais simplement getElementById mais les attributs id et name de l'élément déroulant sont générés par le serveur, donc je ne veux pas utiliser cela pour référencer l'élément. C'est-à-dire que si la conception de la page change dans le futur, elle nommera les éléments _ct105 ou _ct107Récupérer le champ de SQL Server Reporting Services Page

La seule chose que je spécifie sur la page est l'étiquette "Période commerciale". Je pensais utiliser xpath pour référencer cette étendue, puis utiliser un emplacement relatif pour l'élément select suivant, mais je n'arrive pas à comprendre comment faire cela.

Idéalement, je serais en mesure de spécifier l'ID ou le nom (ou tout autre attribut) de l'élément Select lui-même. Est-ce possible? Je vais utiliser jQuery sur la page, donc si quelqu'un peut penser à un bon moyen de le trouver, ce serait génial.

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

Répondre

2

Si vous utilisez déjà jQuery, XPath va être trop puissant. Je vois quelques approches différentes pour y arriver dans jQuery. jQuery utilise des sélecteurs CSS, donc voilà comment ces tous les travaux:

/* 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']") 

ensuite d'utiliser l'un de ces vous simplement utiliser la construction de jQuery dans les méthodes:

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

Comment obtenir cette injection-vous dans le rapport? –

+0

David, ceci est un morceau de JavaScript. Cela reposerait sur l'inclusion de jQuery et de mon script sur la page en utilisant des balises de script et un mécanisme pour retarder l'exécution jusqu'à ce que le DOM soit chargé. – artlung

Questions connexes