2010-02-04 7 views
5

Supponiamo di avere un ASPexTextBox DevExpress il cui id è "strumento". Voglio accedere al valore della casella di testo sul lato client. Quindi ho bisogno di scrivere un javascript.Come accedere al valore di un ASPxTextBox da JavaScript

Se fosse una normale casella di testo asp, avrei potuto accedere alla casella di testo per la scrittura di codice come

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

Ma lo stesso approccio non funziona per casella di testo del DevExpress.

Come accedere a un ASPxTextBox? Sto usando Developer Express versione 7.2.

Ecco il codice più approfondita frammento -

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

Questo è stato il codice ASP. Il corrispondente Javascript è il seguente:

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

risposta

7

È possibile impostare la proprietà ClientInstanceName su AspxTextBox.

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

lato client:

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 documentazione DevExpress ha qualche buon informazioni sui propri script lato client. Andare a questo link, fare clic su Riferimento, quindi fare clic su DevExpress.Web.ASPxEditors.Scripts nel menu.

+0

Appena realizzato che la funzione client GetValue() potrebbe non essere presente nella tua versione. Se non lo è, puoi provare MyTextBox.GetText(). – AGoodDisplayName

+0

Odio le cose 'ClientInstanceName'. Funziona in modo affidabile solo per i controlli primitivi non annidati. Raccomanderei invece di utilizzare una ricerca ClientID. (Tutti i controlli DX "si aggiungono" a 'window' dal ClientId:' window [theClientId] .SetText (..) ') –

1

È possibile che la casella di testo di terze parti non utilizzi il ClientID. Potresti provare UniqueID, anche se potrebbe non essere una soluzione accettabile a livello globale (potrebbe non funzionare in tutti i browser).

+0

No, non funziona in Firefox –

+0

Inoltre non funziona in IE 5.1 ​​ –

+0

ClientID dovrebbe funzionare con il controllo ASPxTextBox. La documentazione del prodotto indica che è ereditata da TextBox e lasciata in pace. Se l'approccio non funziona, suggerirei che c'è qualcos'altro che lo impedisce. Forse uno snippet di codice più completo potrebbe essere d'aiuto? –