'document' undefined error

D

dd

Hello all. First, I'm a newbie to javascript but not to ASP. Secondly
I've been searching for the answer for two hours and I decided to
finally post this question. I'm trying to take a javascript and make
it work with asp. Any thought, ideas or pointers in the right
direction would be greatly appreciated.

I am getting the following error:

Microsoft JScript runtime error '800a1391'

'document' is undefined

/anylink.asp, line 77

which is this line of code: var ie4=document.all

I do not have any forms in this document. I do not understand this
error at all. Here's the full code:

<%
var myConnect = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=";
myConnect += Server.MapPath("\\");
myConnect += "\\database\\db.mdb;";

var ConnectObj = Server.CreateObject("ADODB.Connection");
var RS = Server.CreateObject("ADODB.Recordset");
var sql="SELECT gallery_catid,gallery_cat_name from gallery_cat;";

ConnectObj.Open (myConnect);
RS.Open(sql,ConnectObj,adOpenForwardOnly,adLockReadOnly,adCmdText);
var menu1=new Array();
i=0
while (!RS.EOF)
{
menu1="<a href='?galleryid=" +RS("gallery_catid")+ "'>"
+RS("gallery_cat_name") +"</a><br>";
i=i+1
RS.MoveNext();
}
RS.Close();
ConnectObj.Close();
RS = null;
ConnectObj = null;

var menuwidth='165px' //default menu width
var menubgcolor='lightyellow' //menu bgcolor
var disappeardelay=250 //menu disappear speed onMouseout (in
miliseconds)
var hidemenu_onclick="yes" //hide menu when user clicks within menu?

/////No further editting needed
var ie4=document.all&&navigator.userAgent.indexOf("Opera")==-1;
var ns6=document.getElementById&&!document.all

if (ie4||ns6)
document.write('<div id="dropmenudiv"
style="visibility:hidden;width:'+menuwidth+';background-color:'+menubgcolor+'"
onMouseover="clearhidemenu()" onMouseout="dynamichide(event)"></div>')

function getposOffset(what, offsettype){
var totaloffset=(offsettype=="left")? what.offsetLeft : what.offsetTop;
var parentEl=what.offsetParent;
while (parentEl!=null){
totaloffset=(offsettype=="left")? totaloffset+parentEl.offsetLeft :
totaloffset+parentEl.offsetTop;
parentEl=parentEl.offsetParent;
}
return totaloffset;
}


function showhide(obj, e, visible, hidden, menuwidth){
if (ie4||ns6)
dropmenuobj.style.left=dropmenuobj.style.top=-500
if (menuwidth!=""){
dropmenuobj.widthobj=dropmenuobj.style
dropmenuobj.widthobj.width=menuwidth
}
if (e.type=="click" && obj.visibility==hidden || e.type=="mouseover")
obj.visibility=visible
else if (e.type=="click")
obj.visibility=hidden
}

function iecompattest(){
return (document.compatMode && document.compatMode!="BackCompat")?
document.documentElement : document.body
}

function clearbrowseredge(obj, whichedge){
var edgeoffset=0
if (whichedge=="rightedge"){
var windowedge=ie4 && !window.opera?
iecompattest().scrollLeft+iecompattest().clientWidth-15 :
window.pageXOffset+window.innerWidth-15
dropmenuobj.contentmeasure=dropmenuobj.offsetWidth
if (windowedge-dropmenuobj.x < dropmenuobj.contentmeasure)
edgeoffset=dropmenuobj.contentmeasure-obj.offsetWidth
}
else{
var topedge=ie4 && !window.opera? iecompattest().scrollTop :
window.pageYOffset
var windowedge=ie4 && !window.opera?
iecompattest().scrollTop+iecompattest().clientHeight-15 :
window.pageYOffset+window.innerHeight-18
dropmenuobj.contentmeasure=dropmenuobj.offsetHeight
if (windowedge-dropmenuobj.y < dropmenuobj.contentmeasure){ //move up?
edgeoffset=dropmenuobj.contentmeasure+obj.offsetHeight
if ((dropmenuobj.y-topedge)<dropmenuobj.contentmeasure) //up no good
either?
edgeoffset=dropmenuobj.y+obj.offsetHeight-topedge
}
}
return edgeoffset
}

function populatemenu(what){
if (ie4||ns6)
dropmenuobj.innerHTML=what.join("")
}

function dropdownmenu(obj, e, menucontents, menuwidth){
if (window.event) event.cancelBubble=true
else if (e.stopPropagation) e.stopPropagation()
clearhidemenu()
dropmenuobj=document.getElementById?
document.getElementById("dropmenudiv") : dropmenudiv
populatemenu(menucontents)

if (ie4||ns6){
showhide(dropmenuobj.style, e, "visible", "hidden", menuwidth)
dropmenuobj.x=getposOffset(obj, "left")
dropmenuobj.y=getposOffset(obj, "top")
dropmenuobj.style.left=dropmenuobj.x-clearbrowseredge(obj,
"rightedge")+"px"
dropmenuobj.style.top=dropmenuobj.y-clearbrowseredge(obj,
"bottomedge")+obj.offsetHeight+"px"
}

return clickreturnvalue()
}

function clickreturnvalue(){
if (ie4||ns6) return false
else return true
}

function contains_ns6(a, b) {
while (b.parentNode)
if ((b = b.parentNode) == a)
return true;
return false;
}

function dynamichide(e){
if (ie4&&!dropmenuobj.contains(e.toElement))
delayhidemenu()
else if (ns6&&e.currentTarget!= e.relatedTarget&&
!contains_ns6(e.currentTarget, e.relatedTarget))
delayhidemenu()
}

function hidemenu(e){
if (typeof dropmenuobj!="undefined"){
if (ie4||ns6)
dropmenuobj.style.visibility="hidden"
}
}

function delayhidemenu(){
if (ie4||ns6)
delayhide=setTimeout("hidemenu()",disappeardelay)
}

function clearhidemenu(){
if (typeof delayhide!="undefined")
clearTimeout(delayhide)
}

if (hidemenu_onclick=="yes")
document.onclick=hidemenu
%>

You should be able to mouseover this link and have a dropdown of
categories.

<a href="default.htm" onClick="return clickreturnvalue()"
onMouseover="dropdownmenu(this, event, menu1, '150px')"
onMouseout="delayhidemenu()">Web Design</a>

Many thanks in advance for your thoughts.
 
E

Evertjan.

wrote on 17 jan 2006 in microsoft.public.inetserver.asp.general:
Hello all. First, I'm a newbie to javascript but not to ASP. Secondly
I've been searching for the answer for two hours and I decided to
finally post this question. I'm trying to take a javascript and make
it work with asp. Any thought, ideas or pointers in the right
direction would be greatly appreciated.

I am getting the following error:

Microsoft JScript runtime error '800a1391'

'document' is undefined

/anylink.asp, line 77

which is this line of code: var ie4=document.all

document is valid in clientside j[ava]script, not serverside.
 
E

Evertjan.

debbie wrote on 17 jan 2006 in microsoft.public.inetserver.asp.general:
Thanks. So since I know so little about javascript, how do I fix it?

Please quote what you are replying to.

This is usenet, not email.

If you want to post a followup via groups.google.com, don't use the
"Reply" link at the bottom of the article. Click on "show options" at the
top of the article, then click on the "Reply" at the bottom of the article
headers.
 
D

debbie

Evertjan. said:
debbie wrote on 17 jan 2006 in microsoft.public.inetserver.asp.general:

Please quote what you are replying to.

This is usenet, not email.

If you want to post a followup via groups.google.com, don't use the
"Reply" link at the bottom of the article. Click on "show options" at the
top of the article, then click on the "Reply" at the bottom of the article
headers.

I've never had so much trouble trying to get an answer to anything in
my life. Or replying to a message. Many thanks for your time and
trouble. You gave me a teeny, tiny hint, so I'll run with that and
figure it out. Thanks again.
 
B

Bob Barrows [MVP]

Hello all. First, I'm a newbie to javascript but not to ASP.
Secondly I've been searching for the answer for two hours and I
decided to finally post this question. I'm trying to take a
javascript and make it work with asp. Any thought, ideas or pointers
in the right direction would be greatly appreciated.

I am getting the following error:

Microsoft JScript runtime error '800a1391'

'document' is undefined

/anylink.asp, line 77

which is this line of code: var ie4=document.all

You cannot directly work with DOM/DHTML objects (document, window, body,
etc.) in server-side script: these objects are only available to client-side
script after the page is loaded in the browser. All you can do with
server-side code is use response.write to modify the html that is sent to
the client . I do not have time to plow through your code to see what you
are attempting to do, but I will suggest that you separate out the logic
that needs to work with client-side objects and put that code into
client-side script blocks. You can use response.write to pass server-side
values into client-side variables like this:

<%@ Language=JavaScript%>
<%
//anything between <%..%> is server-side, ASP code
var s="some value"
%>
<html>
<head>
<script type="text/javascript">
//this is client-side code - <%= is shorthand for response.write
var s="<%=s%>";
alert(s);
</script>

For further help, post to a client-side newsgroup such as
microsoft.public.scripting.jscript or comp.lang.javascript
 
E

Evertjan.

debbie wrote on 17 jan 2006 in microsoft.public.inetserver.asp.general:
I've never had so much trouble trying to get an answer to anything in
my life. Or replying to a message. Many thanks for your time and
trouble. You gave me a teeny, tiny hint, so I'll run with that and
figure it out. Thanks again.

This is better.

Usenet is not a paid answering service, and many are reading the
postings. So, if you want the total of knowledge work for you, you should
enable those to read according to Usenet-netiquette, and they will
comment on the conversation if they feel rightly compelled [or simply
meddlesome].

======================================================

Back to your OQ [original question].

ASP-platform code [can be VBscript or Jscript] is executed on the server
and the resulting HTML code is sent as a HTML file [even though the
extention is still .asp, it is not the original asp-file] to the client
browser.

Code between <% and %>, a way of delimiting the asp vbs or js code, is
NOT sent to the client as such.

"document" or really "window.document" is part [an object] of the DOM
where the browser builds the screen display from the received html code
[that can contain clientside jscript, clientside javascript (or for IE
clientside vbscript)

This DOM is only built in the browser, so is not available to the
serverside code parser/interpreter.

So your code is programmed on a misconception that cannot just be
repaired, but should be redone from scratch.

Examples:

=============

clientside javascript:

<script type='text/javascript'>
document.write('Hello world<br>');
</script>

writes "Hello world" on the screen.

==========

serverside ASP-jscript:

<%
response.write('Helloworld<br>');
%>

sends "Hello world" into the HTML code string that is sent to the client
browser to be processed depending on the code context.
 
D

debbie

Thanks Bob. That explains much and is very helpful. I was hesitant to
post to a javascript forum since this was an ASP issue, then I was
afraid I'd get chastised for posting to two forums, so I guess I picked
the wrong one afterall :) Many thanks, though for your thoughts.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,995
Messages
2,570,236
Members
46,822
Latest member
israfaceZa

Latest Threads

Top