Skip to main content
GameDev.net gamedev.net
🔒 Locked

[web] JavaScript on my ASP .NET site can't access HTML elements

Started by Cornstalks Sep 16, 2008 at 9:56 PM 1 replies 3.5k views
Original Post
Cornstalks
Cornstalks
I'm currently working on a website for myself; one where I'll host my projects, a blog that no one will read, etc. Just the usual programmer's website. I'm using Visual Studio 2008, ASP, and C# to code the site. I'm using a master page for my layouts so I don't have to recreate everything for every page. I've started to get to the point where I want to use some &#106avascript for some web effects. Right now I'm trying to create a little menu animation where when the user hovers their mouse over a menu item, a drop down menu rolls out showing some sub menu buttons. However I've discovered there are some issues with ASP and &#106avascript (or maybe it's just me). Whenever I try to get an HTML element in &#106avascript via document.getElementById(), the function returns null. Both the &#106avascript and the element it's trying to access are in the master page, not the content page. Am I doing something wrong? Here is the code I'm using (it's been simplified, but I've tested it so I know these pages compile but still have the &#106avascript issues). MasterPage.master <!--STARTSCRIPT--><!--source lang="cpp"--><div class="source"><pre>&lt;%@ Master Language=<span class="cpp-literal">"C#"</span> AutoEventWireup=<span class="cpp-literal">"true"</span> CodeBehind=<span class="cpp-literal">"MasterPage.master.cs"</span> Inherits=<span class="cpp-literal">"mjbshaw.MasterPage"</span> %&gt; &lt;!DOCTYPE html <span class="cpp-keyword">PUBLIC</span> <span class="cpp-literal">"-//W3C//DTD XHTML 1.0 Transitional//EN"</span> <span class="cpp-literal">"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</span>&gt; &lt;html xmlns=<span class="cpp-literal">"http://www.w3.org/1999/xhtml"</span> &gt; &lt;head runat=<span class="cpp-literal">"server"</span>&gt; &lt;title&gt; &lt;asp:ContentPlaceHolder ID=<span class="cpp-literal">"TitlePlaceHolder"</span> runat=<span class="cpp-literal">"server"</span>&gt;&lt;/asp:ContentPlaceHolder&gt; &lt;/title&gt; &lt;asp:ContentPlaceHolder ID=<span class="cpp-literal">"head"</span> runat=<span class="cpp-literal">"server"</span>&gt;&lt;/asp:ContentPlaceHolder&gt; &lt;link href=<span class="cpp-literal">"App_Themes/StyleSheet.css"</span> rel=<span class="cpp-literal">"stylesheet"</span> type=<span class="cpp-literal">"text/css"</span> /&gt; &lt;script type=<span class="cpp-literal">"text/javascript"</span>&gt; var button = document.getElementById('&lt;%= menuButton0.ClientID %&gt;'); alert(button); &lt;/script&gt; &lt;script src=<span class="cpp-literal">"navigationMenu.js"</span> type=<span class="cpp-literal">"text/javascript"</span>&gt;&lt;/script&gt; &lt;/head&gt; &lt;body&gt; &lt;form id=<span class="cpp-literal">"form"</span> runat=<span class="cpp-literal">"server"</span>&gt; &lt;ul <span class="cpp-keyword">class</span>=<span class="cpp-literal">"navigationMenu"</span>&gt; &lt;li <span class="cpp-keyword">class</span>=<span class="cpp-literal">"menuItem"</span>&gt; &lt;asp:Label ID=<span class="cpp-literal">"projectsButton"</span> runat=<span class="cpp-literal">"server"</span>&gt; &lt;a href=<span class="cpp-literal">"~/projects/"</span> id=<span class="cpp-literal">"menuButton0"</span> runat=<span class="cpp-literal">"server"</span>&gt; Projects &lt;/a&gt; &lt;/asp:Label&gt; &lt;div id=<span class="cpp-literal">"subMenu0"</span> <span class="cpp-keyword">class</span>=<span class="cpp-literal">"navigationSubMenu"</span>&gt; &lt;a href=<span class="cpp-literal">"#"</span> <span class="cpp-keyword">class</span>=<span class="cpp-literal">"subMenuButton"</span>&gt;sub menu button <span class="cpp-number">1</span>&lt;/a&gt; &lt;a href=<span class="cpp-literal">"#"</span> <span class="cpp-keyword">class</span>=<span class="cpp-literal">"subMenuButton"</span>&gt;sub menu button <span class="cpp-number">2</span>&lt;/a&gt; &lt;a href=<span class="cpp-literal">"#"</span> <span class="cpp-keyword">class</span>=<span class="cpp-literal">"subMenuButton"</span>&gt;sub menu button <span class="cpp-number">3</span>&lt;/a&gt; &lt;/div&gt; &lt;/li&gt; &lt;/ul&gt; &lt;div <span class="cpp-keyword">class</span>=<span class="cpp-literal">"content"</span>&gt; &lt;asp:ContentPlaceHolder id=<span class="cpp-literal">"ContentPlaceHolder"</span> runat=<span class="cpp-literal">"server"</span>&gt; &lt;/asp:ContentPlaceHolder&gt; &lt;/div&gt; &lt;/form&gt; &lt;/body&gt; &lt;/html&gt; </pre></div><!--ENDSCRIPT--> Default.aspx <!--STARTSCRIPT--><!--source lang="cpp"--><div class="source"><pre>&lt;%@ Page Language=<span class="cpp-literal">"C#"</span> MasterPageFile=<span class="cpp-literal">"~/MasterPage.Master"</span> AutoEventWireup=<span class="cpp-literal">"true"</span> CodeBehind=<span class="cpp-literal">"Default.aspx.cs"</span> Inherits=<span class="cpp-literal">"mjbshaw._Default"</span> %&gt; &lt;asp:Content ID=<span class="cpp-literal">"Content1"</span> ContentPlaceHolderID=<span class="cpp-literal">"TitlePlaceHolder"</span> runat=<span class="cpp-literal">"server"</span>&gt; Home Page &lt;/asp:Content&gt; &lt;asp:Content ID=<span class="cpp-literal">"Content2"</span> ContentPlaceHolderID=<span class="cpp-literal">"ContentPlaceHolder"</span> runat=<span class="cpp-literal">"server"</span>&gt; Content goes here &lt;/asp:Content&gt; </pre></div><!--ENDSCRIPT--> navigationMenu.js <!--STARTSCRIPT--><!--source lang="cpp"--><div class="source"><pre>alert(button); function hover(item) { item.style.color = <span class="cpp-literal">"Red"</span>; } button.onmouseover = function(){hover(<span class="cpp-keyword">this</span>);}; </pre></div><!--ENDSCRIPT--> I even decided to write a simple test html page to see if I am just being dumb, and the following always shows "null" in the message box. Why won't this simple test example work either? <!--STARTSCRIPT--><!--source lang="cpp"--><div class="source"><pre>&lt;html&gt; &lt;head&gt; &lt;script type=<span class="cpp-literal">"text/javascript"</span>&gt; var v = document.getElementById(<span class="cpp-literal">"link"</span>); alert(v); &lt;/script&gt; &lt;/head&gt; &lt;body&gt; &lt;a href=<span class="cpp-literal">"#"</span> id=<span class="cpp-literal">"link"</span>&gt;asdf&lt;/a&gt; &lt;/body&gt; &lt;/html&gt; </pre></div><!--ENDSCRIPT--> Any help would be greatly appreciated!
Optus
Optus
I believe it's because the &#106avascript code that you don't put within a function is executed before the page is finished loading. The element "link" in your test doesn't exist yet. If you put the code in an onload statement, it works fine.

See:
<script type="text/javascript">function test () {var v = document.getElementById("link");alert(v);}</script></head><body onload="test()">asdf</body></html>
Cornstalks
Cornstalks
Oh wow. That's a much simpler problem than I thought. Thanks! I've just tested it out and it works perfectly now. Thanks again!

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.