2010-02-04 22 views
5

Supongamos que tengo un Devxpress ASPxTextBox cuyo id es "instrumento". Quiero acceder al valor del cuadro de texto en el lado del cliente. Entonces necesito escribir un javascript.Cómo acceder al valor de un ASPxTextBox desde JavaScript

Si se trata de un cuadro de texto normal, asp, podría haber accedido al cuadro de texto escribiendo código como

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

Pero el mismo enfoque no está trabajando de cuadro de texto del DevExpress.

¿Cómo puedo acceder a un ASPxTextBox? Estoy usando Developer Express Version 7.2.

Aquí es algún fragmento de código más completo -

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

Ese fue el código ASP. El Javascript correspondiente es el siguiente:

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

Respuesta

7

Puede establecer la propiedad ClientInstanceName en AspxTextBox.

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

ClientSide:

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 documentación DevExpress tiene algunos bastante buena información sobre sus secuencias de comandos del lado del cliente. Vaya a este link, haga clic en Referencia, luego haga clic en DevExpress.Web.ASPxEditors.Scripts en el menú.

+0

Acaba de darse cuenta de que la función del cliente GetValue() podría no haber existido en su versión. Si no es así, puedes probar MyTextBox.GetText(). – AGoodDisplayName

+0

Odio las cosas 'ClientInstanceName'. Funciona de manera confiable solo para controles primitivos no anidados ... Recomiendo utilizar una búsqueda de ClientID en su lugar. (Todos los controles DX se "agregan" a sí mismos a 'window' mediante su ClientId:' window [theClientId] .SetText (..) ') –

1

Es posible que el tercer cuadro de texto del partido no hace uso de la ClientID. Puede probar UniqueID, aunque esto puede no ser una solución aceptable globalmente (podría no funcionar en todos los navegadores).

+0

No, no funciona en Firefox –

+0

También no funciona en IE 5.1 ​​ –

+0

ClientID debe trabajar con el control de ASPxTextBox. La documentación del producto indica que se hereda de TextBox y se deja solo. Si el enfoque no funciona, sugeriría que hay algo más que lo está impidiendo. Tal vez un fragmento de código más completo podría ayudar? –

Cuestiones relacionadas