'document' undefined error

Discussion in 'ASP General' started by dd@clickfocal.com, Jan 17, 2006.

  1. Guest

    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.
    , Jan 17, 2006
    #1
    1. Advertising

  2. Evertjan. Guest

    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.

    --
    Evertjan.
    The Netherlands.
    (Please change the x'es to dots in my emailaddress)
    Evertjan., Jan 17, 2006
    #2
    1. Advertising

  3. debbie Guest

    Thanks. So since I know so little about javascript, how do I fix it?
    Thanks again.
    debbie, Jan 17, 2006
    #3
  4. Evertjan. Guest

    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.

    --
    Evertjan.
    The Netherlands.
    (Please change the x'es to dots in my emailaddress)
    Evertjan., Jan 17, 2006
    #4
  5. debbie Guest

    Evertjan. wrote:
    > 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.
    >
    > --
    > Evertjan.
    > The Netherlands.
    > (Please change the x'es to dots in my emailaddress)


    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.
    debbie, Jan 17, 2006
    #5
  6. wrote:
    > 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
    --
    Microsoft MVP -- ASP/ASP.NET
    Please reply to the newsgroup. The email account listed in my From
    header is my spam trap, so I don't check it very often. You will get a
    quicker response by posting to the newsgroup.
    Bob Barrows [MVP], Jan 17, 2006
    #6
  7. Evertjan. Guest

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

    > Evertjan. wrote:
    >> 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.

    >
    > 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.


    --
    Evertjan.
    The Netherlands.
    (Please change the x'es to dots in my emailaddress)
    Evertjan., Jan 17, 2006
    #7
  8. debbie Guest

    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.

    Bob Barrows [MVP] wrote:
    > wrote:
    > > 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
    > --
    > Microsoft MVP -- ASP/ASP.NET
    > Please reply to the newsgroup. The email account listed in my From
    > header is my spam trap, so I don't check it very often. You will get a
    > quicker response by posting to the newsgroup.
    debbie, Jan 17, 2006
    #8
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Mantorok Redgormor
    Replies:
    70
    Views:
    1,723
    Dan Pop
    Feb 17, 2004
  2. Wes Gamble
    Replies:
    1
    Views:
    122
    Wes Gamble
    Jan 30, 2008
  3. John Ramsden
    Replies:
    6
    Views:
    219
    John Ramsden
    Sep 12, 2003
  4. VK
    Replies:
    45
    Views:
    572
    Dr John Stockton
    Sep 12, 2006
  5. -Lost
    Replies:
    13
    Views:
    355
    Richard Cornford
    Jan 31, 2007
Loading...

Share This Page