2010-06-25 6 views
0

En charge, j'appelle une fonction JavaScript setTimeout() qui masque un contrôle .NET Panel et le masque dans le code au premier chargement. En cliquant sur le bouton enregistrer, le panneau sera visible puis rechargera la page à quel point une fonction setTimeout() est appelée ... donc vous cliquez sur enregistrer, et vous voyez un panneau avec "Details Saved" pendant trois secondes, à quel point disparaît.asp.net external Fichier JavaScript ne trouve pas Control.ClientID

Le problème est le fichier JavaScript externe ne peut pas trouver _pDivAlert.ClientID (j'ai débogué et il renvoie null). Cela ne fonctionne que lorsque le code est dans une balise dans la page .aspx. Des suggestions sur la façon dont je peux transmettre l'ID client à la fonction HideControl() ou trouver le ClientID à partir du fichier JS externe?

Voici mon code, des suggestions?

<script language="javascript" src="Forms.js" type="text/javascript"></script> 

<body onload="ToggleAlert()"> 
<form id="form1" runat="server"> 
<script type="text/javascript"> 
    //alert the user that the details were saved 
    function HideControl() { 
     var control = document.getElementById('<%=_pDivAlert.ClientID %>'); 
     if(control != null) 
      control.style.display = 'none'; 
    } 
    function ToggleAlert() { 
     setTimeout("HideControl()", 3000); 
    } 
</script> 

J'ai aussi essayé d'envoyer le ClientID dans le ToggleAlert() appel, mais cela n'a pas fonctionné:

<body onload="ToggleAlert('<%=_pDivAlert.ClientID %>')"> 

externe JS:

function HideControl(_c) { 
var control = _c; 
if (control != null) 
    control.style.display = 'none'; 
} 
function ToggleAlert(_c) { 
    setTimeout("HideControl(_c)", 3000); 
} 

Répondre

1

peut vous montrer votre balisage avec le panneau et le codebehind où vous le cachez? Il existe une différence entre définir la propriété Visible sur false et définir l'attribut style display sur none- le premier ne rendra pas l'élément du tout, ce qui signifie qu'il n'y a rien de rendu avec l'ID que vous recherchez.

edit: c'est probablement à cause de la façon dont vous appelez HideControl dans le timeout - cela devrait être une fonction au lieu d'une chaîne.

essayer de faire

function ToggleAlert(_c) { 
    setTimeout( 
     function() { 
      HideControl(_c); 
     }, 3000); 
} 

juste pour la clarté, lorsque vous passez une chaîne à setTimeout, il est évalué et puis exécutez. le bloc de code généré par eval s'exécutera dans un périmètre différent de celui de votre méthode ToggleAlert. Par conséquent, _c ne sera pas disponible à ce moment-là.

edit: vous devez également obtenir une référence au contrôle. vous passez la chaîne d'ID à ToggleAlert, qui le relaie à HideControl, qui attend un objet pas une chaîne.

function HideControl(_c) { // _c is the id of the element 
    var control = document.getElementById(_c); 
    if (control != null) 
     control.style.display = 'none'; 
} 
+0

Merci pour la réponse. J'ai fait une fonction HideControl(), et maintenant je vois l'ID de contrôle dans le JS externe. Mais maintenant, lors du débogage, je vois que "style" dans "control.style.display = 'none'" est "indéfini". – Barryman9000

+0

J'ai édité mon post pour résoudre le problème dans votre commentaire. – lincolnk

+0

Bien! C'est ce que j'ai fait, merci! – Barryman9000