J'essaie simplement de stocker une étiquette dans une variable en javascript mais pour une raison quelconque, cela ne fonctionne pas avec document.getElementById('control');
. Je sais que mon javascript est bien lié à mon fichier html car tout le reste fonctionne.
Voici mon code javascript:
function performEvapCooledCircuit(txt)
{
var error = document.getElementById('lblError');
if (txt.value == null || isNaN(txt.value))
{
error.style.visibility = "visible";
}
}
Voici le code html de mon étiquette:
<asp:Label ID="lblError" class="NormLabel" runat="server"
style="color:red; visibility:hidden;" Text="Invalid Input."></asp:Label>
Je reçois une erreur indiquant que l'objet est attendu ??
L'ID généré par ASP.NET ne sera pas "lblError", vous devrez donc le référencer par son ClientID
document.getElementById('<%=lblError.ClientID %>');
Si votre fichier javascript est externe, j'ai généralement dû écrire un type de méthode javascript "Init" pour m'assurer que mes identifiants étaient bien configurés
Sur votre page 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>
Ensuite, dans votre fichier javascript, vous devrez appeler InitializeVariables()
pour vous assurer que les variables pointent vers les bons contrôles asp.net
function performEvapCooledCircuit(txt)
{
InitializeVariables();
if (txt.value == null || isNaN(txt.value))
{
lblError.style.visibility = "visible";
}
}
"hunter" donne une façon assez solide de faire les choses, cependant, à mon avis, une meilleure méthode consiste à utiliser la propriété "CliendIDMode" sur le contrôle et à définir cette propriété sur "Static". Cela rendra les ID client et serveur identiques. Comme ça:
<asp:TextBox ID="ServerAndClientId" runat="server" ClientIDMode="Static" />
L'ID de l'étiquette n'est pas "lblError". Le moteur ASP.net a changé l'ID. Vérifiez le code source HTML dans le navigateur pour connaître l'ID réel.
Vous pouvez utiliser ceci:
document.getElementById('<%= lblError.ClientID %>').click()
À partir d'ASP.NET 4.0, vous pouvez utiliser la propriété ClientIDMode pour votre élément. Et si vous le définissez dans Static
, la valeur ClientID
sera définie sur la valeur de la propriété ID:
<asp:Label ID="lblError" runat="server" ClientIDMode="Static" />
sera rendu comme quelque chose comme ceci:
<span id="lblError" name="ctl00$MasterPageBody$ctl00$Label1" />
Ce n'est pas du HTML pour l'étiquette, c'est un contrôle ASP.NET qui sera rendu en HTML avant d'être envoyé dans la réponse. Les contrôles ASP.NET WebForms modifient parfois l'ID du code HTML qu'ils créent.
Affichez la source de la page Web pour voir l'ID de l'élément HTML sur la page rendue.