2011-01-04 12 views
15

Sto semplicemente cercando di memorizzare un'etichetta in una variabile in javascript ma per qualche motivo questo non funziona con document.getElementById('control');. So che il mio javascript è collegato al mio file html bene perché tutto il resto funziona.getElementById non trova il controllo generato da ASP.net

Ecco il mio codice javascript:

function performEvapCooledCircuit(txt) 
{ 
    var error = document.getElementById('lblError'); 


    if (txt.value == null || isNaN(txt.value)) 
    { 
     error.style.visibility = "visible"; 
    } 
} 

Ecco il codice html per la mia etichetta:

<asp:Label ID="lblError" class="NormLabel" runat="server" 
    style="color:red; visibility:hidden;" Text="Invalid Input."></asp:Label> 

sto ottenendo un errore che dice oggetto aspettava ??

risposta

20

L'ID che ASP.NET genererà non sarà "lblError" quindi è necessario fare riferimento dal suo ClientID

document.getElementById('<%=lblError.ClientID %>'); 

Se il file javascript è esterno che ho avuto di solito di scrivere una sorta di "Init" javascript metodo per assicurarsi che il mio ID di proprietà sono stati istituiti

Nella pagina ASPX:

<script type="text/javascript"> 
    var lblError = null; 
    function InitializeVariables() 
    { 
     if (lblError == null) // make sure you only do this once 
     { 
      lblError = document.getElementById("<%=lblError.ClientID %>"); 
     } 
    } 
</script> 
<asp:Label 
    ID="lblError" 
    class="NormLabel" 
    runat="server" 
    style="color:red; visibility:hidden;" 
    Text="Invalid Input."></asp:Label> 

Poi nel file javascript Dovrete chiamare InitializeVariables() per fare in modo di avere le variabili che puntano alla corretta asp.net controlla

function performEvapCooledCircuit(txt) 
{ 
    InitializeVariables(); 

    if (txt.value == null || isNaN(txt.value)) 
    { 
     lblError.style.visibility = "visible"; 
    } 
} 
+0

Il codice JavaScript non è incorporato nel il file ASP.net. –

+0

come fai a saperlo? – hunter

+0

Oltre alla spiegazione di Šime Vidas, questa risposta potrebbe essere utile. –

2

L'ID del marchio non è "lblError". Il motore ASP.net ha cambiato l'ID. Controlla il codice sorgente HTML nel browser per scoprire l'ID reale.

+0

@ ŠimeVidas: non consiglierei di codificare a fondo il valore dell'ID in quanto questo può cambiare in base alla posizione del contenitore. Dato che una pagina è moderatamente statica, ciò andrebbe bene, ma in qualsiasi futura aggiunta/riprogettazione, questo potrebbe essere un problema. –

+0

@Brad Sì, l'hard-coding sarebbe una cattiva idea. Non faccio ASP.net ma ricordo di aver riscontrato questo problema e ho letto di una funzionalità che consente di definire direttamente ClientID. Questa sarebbe la soluzione a questo problema. –

1

Questo non è HTML per l'etichetta, ovvero un controllo ASP.NET che verrà sottoposto a rendering in HTML prima di essere inviato nella risposta. I controlli di WebForms ASP.NET a volte cambiano l'id per l'HTML che creano.

Visualizzare l'origine della pagina Web per vedere quale sia l'ID per l'elemento HTML nella pagina di rendering.

6

"cacciatore" offre un modo abbastanza solido di fare le cose, tuttavia a, secondo me il metodo migliore è quello di utilizzare la proprietà "CliendIDMode" sul controllo e impostare tale proprietà su "Statico". Ciò renderà gli ID client e server uguali. Come questo:

<asp:TextBox ID="ServerAndClientId" runat="server" ClientIDMode="Static" /> 
+1

Wow, grazie. Ma [questo] (http://stackoverflow.com/questions/6057490/is-there-any-drawback-to-set-clientidmode-static-on-every-object-set-on-main) post dice che c'è qualche inconveniente nell'usare questo. – Arman

+1

Sì, a seconda del tipo di controllo non è sempre l'ideale. Nel complesso, lo preferisco comunque comunque. Soprattutto se hai tutto il tuo javascript in file esterni (come un bravo ragazzo o una ragazza). – Maverick

1

È possibile utilizzare questo:

document.getElementById('<%= lblError.ClientID %>').click() 

A partire da ASP.NET 4.0 è possibile utilizzare ClientIDMode proprietà per voi elemento. E se si imposta in Static allora il valore ClientID verrà impostato il valore della proprietà ID:

<asp:Label ID="lblError" runat="server" ClientIDMode="Static" /> 

verrà tradotto in qualcosa di simile a questo:

<span id="lblError" name="ctl00$MasterPageBody$ctl00$Label1" /> 
Problemi correlati