2010-02-04 5 views
5

Supposons que j'ai un DevExpress ASPxTextBox dont l'identifiant est "instrument". Je veux accéder à la valeur de la zone de texte du côté client. J'ai donc besoin d'écrire un javascript.Comment accéder à la valeur d'un ASPxTextBox à partir de JavaScript

Si c'était une zone de texte asp normal, je aurait pu accéder à la zone de texte en écrivant du code comme

var instrumentElement = document.getElementById('<%=instrument.ClientID%>')

Mais la même approche ne fonctionne pas pour la zone de texte du DevExpress.

Comment puis-je accéder à un ASPxTextBox? J'utilise Developer Express Version 7.2.

Voici un code plus complet snippet -

<div style="display: inline; float: left;"> 
    <dxe:ASPxTextBox ID="InstrumentQuantity" runat="server" Width="170px"> 
    </dxe:ASPxTextBox> 
</div> 

<div style="display: inline; float: left;" onclick="incOrDecQty(0);"> 
    <asp:ImageButton ID="decrementQuantity" runat="server" 
      Height="16px" Width="16px" ImageUrl="~/images/left.png" 
      AlternateText="Decrease Quantity" PostBackUrl="javascript:void(0);"/> 
</div> 

<div onclick="incOrDecQty(1);"> 
    <asp:ImageButton ID="incrementQuantity" runat="server" 
      AlternateText="Increase Quantity" ImageUrl="~/images/right.png" 
      Height="16px" Width="16px" PostBackUrl="javascript:void(0);" /> 
</div> 

C'était le code ASP. Le Javascript est la suivante correspondant:

function incOrDecQty() 
{ 
    var element = document.getElementById('<%=InstrumentQuantity.ClientID%>'); 
    var lotSize = parseInt(document.getElementById('<%=LotSize.ClientID%>') 
     .innerHTML, 10); 
    var currentValue = parseInt(element.value,10); 

    if(arguments[0] == 1) 
     currentValue += lotSize; 
    else if((currentValue - lotSize) >= 0) 
     currentValue -= lotSize; 

    element.value= currentValue;    
} 

Répondre

7

Vous pouvez définir la propriété ClientInstanceName sur AspxTextBox.

<dxe:ASPxTextBox ID="InstrumentQuantity" 
runat="server" Width="170px" 
ClientInstanceName="MyTextBox"> 
</dxe:ASPxTextBox> 

InfoClient:

function DoSomething() 
{ 
    var theText = MyTextBox.GetValue(); //GetValue() is the DevExpress clientside function 

    MyTextBox.SetValue('this is the value i want to use'); //Sets the text 

} 

La documentation DevExpress a une assez bonne information sur leurs scripts côté client. Rendez-vous sur link, cliquez sur Référence, puis sur DevExpress.Web.ASPxEditors.Scripts dans le menu.

+0

Je viens de réaliser que la fonction client GetValue() n'a peut-être pas existé dans votre version. Si ce n'est pas le cas, vous pouvez essayer MyTextBox.GetText(). – AGoodDisplayName

+0

Je déteste le truc 'ClientInstanceName'. Il fonctionne de manière fiable uniquement pour les contrôles primitifs non imbriqués. Je recommande d'utiliser une recherche de clientID à la place. (Tous les contrôles DX "s'ajoutent" à 'window' par leur ClientId:' window [theClientId] .SetText (..) ') –

1

Il est possible que la zone de texte tiers ne fait pas usage de la ClientID. Vous pouvez essayer UniqueID, bien que ce ne soit pas une solution globalement acceptable (peut ne pas fonctionner dans tous les navigateurs).

+0

Non, il ne fonctionne pas dans Firefox –

+0

Il ne fonctionne pas dans IE 5.1 ​​ –

+0

ClientID devrait fonctionner avec le contrôle ASPxTextBox. La documentation du produit indique qu'il est hérité de TextBox et laissé seul. Si l'approche ne fonctionne pas, je dirais qu'il y a autre chose qui l'empêche. Peut-être un extrait de code plus complet pourrait-il aider? –

Questions connexes