i've got an html element declared as so:
<div id="taskImage" runat="server">
<a href="javascript:void(0);" onclick="switchViews('div<%# Eval("proId") %>', 'one');">
<img id='imgdiv<%# Eval("proId") %>' alt="Click to show/hide tasks" border="0" src="..."/>
</a>
</div>
and the javascript function switchViews is declared post-html as such:
function switchViews(obj, row) {
var div = document.getElementById(obj);
var img = document.getElementById('img' + obj);
if (div.style.display == "none") {
div.style.display = "inline";
img.src = "../../images/icons/delete.png";
}
else {
div.style.display = "none";
img.src = "../../images/icons/add.png";
}
}
when I click on the html element, i get thrown a JS error saying "Object Exepcted", and in the google chrome script debugger it says that switchViews is undefined. Why would it think that switchViews is undefined and how would I go about fixing it? For the record I have tried it with the javascript declared before the html and with the switchViews call in the href attribute but it all ends the same.
EDIT : to clear something up, by post-html and pre-html i mean before and after i write out the html elements. so post would be like
<div>
<!-- All my html stuff -->
<div>
<script type="text/javascript">
<!-- All my Javascript -->
</script>
and pre would be the reverse of that
Question
At the point where
<a href="javascript:void(0);" onclick="switchViews(... etc
is encountered by the browser, does the functionswitchViews
exist or is it undefined?Answer
The code defining
switchViews
appears after, so at that timeswitchViews
is undefined.Solution
Place your
<script>
before the rest of the HTML or attach the event listener in your JavaScript instead of inline. This can be done viaaddEventListener
or using jQuery and may require you to loop over your HTMLElements of interest.