1

The problem in the code below is calling one function from another then all formatting is lost - the function domenu calls doarticle with the relevant page number OK but the doarticle function does not format with CSS at all. if I call the functions independently then everything works fine, it's only when I call one from the other that the problem appears.

MONITORING CSS WITH FIREBUG: All CSS data vanishes from the DOM when the doarticle function is called.

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
<meta http-equiv="X-UA-Compatible" content="chrome=1,IE=9" />
<meta name="viewport" content="user-scalable=no, width=768" />
<link rel="apple-touch-icon" href="images/guide_icon.png"/>
<title>The Guide</title>
<style type="text/css">
    body
    {
    width:768px;
    background: #FFFFFF;
    border-width: 0px;
    border-style: solid;
    border-color: #FFFFFF;
    padding: 0;
    margin: auto;
    position:relative;
    }
    div, span
    {
    font-family:Arial,Helvetica,sans-serif;
    font-size:140%;
    font-weight:normal;
    text-align:justify;
    color:#000000;
    }
    img.imgpadded
    {
    padding: 12px 7px 7px 7px ;
    }
    img.imgborder
    {
    width:764px;
    border-width: 2px;
    border-style: solid;
    border-color: #FFFFFF;
    }
    span.footnum
    {
    font-family:Arial,Helvetica,sans-serif;
    font-size:110%;
    font-weight:normal;
    color:#FF3300;
    }
    span.foottext
    {
    font-family:Arial,Helvetica,sans-serif;
    font-size:110%;
    font-weight:normal;
    color:#000000;
    }
    div.topic
    {
    font-family:Arial,Helvetica,sans-serif;
    font-size:100%;
    font-weight:bold;
    color:#6D8BE6;
    }
    div.title
    {
    font-family:Arial,Helvetica,sans-serif;
    font-size:250%;
    font-weight:bold;
    color:#000000;
    }
    div.summary
    {
    font-family:Arial,Helvetica,sans-serif;
    font-size:115%;
    font-weight:normal;
    color:#000000;
    }
    span.menutitle
    {
    font-family:Arial,Helvetica,sans-serif;
    font-size:100%;
    font-weight:bold;
    color:#6D8BE6;
    }
    span.menusummary
    {
    font-family:Arial,Helvetica,sans-serif;
    font-size:80%;
    font-weight:normal;
    color:#000000;
    }
    div.bigquote
    {
    font-family:Arial,Helvetica,sans-serif;
    font-size:210%;
    font-weight:normal;
    color:#000033;
    }
    img.banner
    {
    width: 768px;
    vertical-align: bottom;
    }
    sup
    {
    font-family:Arial,Helvetica,sans-serif;
    font-size:50%;
    font-weight:bold;
    color:#FF3300;
    }
    blockquote
    {
    font-family:Arial,Helvetica,sans-serif;
    font-size:100%;
    font-weight:normal;
    color:#000000;
    margin:20px 0 20px 20px;
    padding:10px 10px 10px;
    background-color:#eee;
    border-left:4px solid #6D8BE6;
    }
    ul
    {
    list-style-type:none;
    padding:10px;
    margin:0px;
    }
    li
    {
    background-image:url(images/blue_square.png);
    background-repeat:no-repeat;
    background-position:0px 5px; 
    padding-left:30px;
    padding-right:50px;
    }
</style>

Metas and CSS above

The article HTML rendering engine below...

<script type="text/javascript">
function doarticle (counter)
{
// document.body.innerHTML = "";
hhgaudio = 0;
strpos = 0;
hhgstring = "";

    if (hhgdata[counter][2].substring(strpos,(strpos+7)) === "<HHGML>")
    {
        strpos = 7;
        if (hhgdata[counter][2].substring(strpos,(strpos+8)) == "<BANNER>") // large banner at the top of the article
        {
            strpos = strpos +8;

            while (hhgdata[counter][2].substring(strpos,(strpos+9)) != "</BANNER>")
            {
                hhgstring = hhgstring + hhgdata[counter][2].substring(strpos,(strpos+1));
                strpos++;
            }
            strpos = strpos + 9;
            hhgstring = "<img id=\"banner\" src=\"" + imgpath + hhgstring + "\" style=\"vertical-align: top\"/>";
        }   
        hhgstring = "<img class=\"banner\" src=\"" + imgpath + "hhg_entry.jpg\" style=\"vertical-align: bottom\"/><br/>" + hhgstring;
        document.write(hhgstring);
        hhgstring = "<table frame=\"void\" border=\"0\" cellpadding=\"2\"><tr><td>";        
        hhgstring = hhgstring + "<div class=\"topic\">"+ (hhgdata[counter][0].toUpperCase()) + "<br/></div>"; // main article topic
        hhgstring = hhgstring + "<div class=\"title\">" + hhgdata[counter][1] + "</div>"; // main article title
        hhgstring = hhgstring + "<div class=\"summary\">" + (hhgdata[counter][3].toUpperCase()) + "</div>"; // article sub heading
        hhgstring = hhgstring + "</td></tr></table>"
        document.write(hhgstring);
        hhgstring = "";
        footernum = 0;


    }   
    document.write("<br/><table border=\"0\" cellpadding=\"10\"><tr><td><span>Entry Ends.</span></tr></table><br/>");
} // end of <HHGML> 

</script>

The menu listing function...

<script type="text/javascript">
function domenu (lastrecord)
{
    hhgstring = "<br/><br/><table border=\"0\" cellpadding=\"0\">";
    for (counter=1; counter<lastrecord; counter++)
    {
        recnum = lastrecord - counter;
        // hhgstring = hhgstring + "<tr><td><img id=\"imgpadded\" src=\"" + imgpath + hhgdata[recnum][4] + "\" align=\"left\"></td>";
        hhgstring = hhgstring + "<tr><td>" + hhgdata[recnum][4] + "</td>";
        hhgstring = hhgstring + "<td><span class=\"menutitle\" onclick=\"doarticle('" +recnum+ "');\">" + tab + hhgdata[recnum][1] + "<br/></span>";
        hhgstring = hhgstring + "<span class=\"menusummary\">" + tab + hhgdata[recnum][3] + "</span></td></tr>";
    }
    hhgstring = hhgstring + "</table>";
    document.write(hhgstring);
    // return(hhgselect); // older idea now depreciated.
}
</script>

</head>

<body>

The database bit...

<?php
    $con = mysql_connect("XXXX","XXXX","XXXX");
    mysql_select_db("HHG", $con);
    if (!$con)
    {
        die('Could not connect: ' . mysql_error());
    }
    else 
    {
        $result = mysql_query("SELECT * FROM articles", $con);
        $numrows = mysql_num_rows($result);
    }
?> 

<script type="text/javascript">
    numrows = <?php echo $numrows; ?>;
    hhgdata = new Array(numrows);
    hhgfooter = new Array(10);
</script>

<?php
    $counter = 0;
    while ($row = mysql_fetch_assoc($result))
    {
        $hhgtitle = $row["hhgtitle"];
        $hhgtopic = $row["hhgtopic"];
        $hhgarticle = mysql_real_escape_string($row["hhgarticle"]);
        $hhgsummary = mysql_real_escape_string($row["hhgsummary"]);
        $hhgidimg = $row["hhgidimg"];
    ?>

Convert the PHP to Javascript vars...

    <script type="text/javascript">
        counter = <?php echo $counter; ?>; 
        hhgtitle = <?php echo '"'.$hhgtitle.'"'; ?>;
        hhgtopic = <?php echo '"'.$hhgtopic.'"'; ?>;
        hhgarticle = <?php echo '"'.$hhgarticle.'"'; ?>;
        hhgsummary = <?php echo '"'.$hhgsummary.'"'; ?>;
        hhgidimg = <?php echo '"'.$hhgidimg.'"'; ?>; 
        hhgdata[counter] = new Array(5);
        hhgdata[counter][0]= hhgtopic;
        hhgdata[counter][1]= hhgtitle;
        hhgdata[counter][2]= hhgarticle
        hhgdata[counter][3]= hhgsummary;
        hhgdata[counter][4]= hhgidimg;
    </script>

    <?php
    $counter++;
    }
mysql_close($con);
?>

call the menu script ...

<script type="text/javascript">
imgpath = "images/";
tab = "&nbsp;&nbsp;&nbsp;&nbsp;";
hhgselect = domenu (numrows);
doarticle (hhgselect);
// document.body.innerHTML = ""; // clears the screen


</script>

</body>

</html>
TJS101
  • 490
  • 1
  • 7
  • 19
  • 4
    That's a lot of code... can't you create a simple example that reproduces the problem (cut out all the unnecessary stuff)? And if it is about styling, you should also create a http://jsfiddle.net demo. I'm not god in visualizing CSS styles in my head... – Felix Kling Jan 24 '12 at 18:02
  • @FelixKling could it be what you pointed out here? [Reapply style after adding content with JavaScript](http://stackoverflow.com/questions/8991594/reapply-style-after-adding-content-with-javascript) – calebds Jan 24 '12 at 18:21
  • How do you reapply styles Paislee? I have added the css to a file so I can use link rel. Is there a way of reloading the file in the function? – TJS101 Jan 24 '12 at 18:29
  • @paislee: Yes, probably. I now noticed that the OP is using `document.write`. @user1150866: Use other ways to manipulate the DOM. `document.write` will replace the whole document. – Felix Kling Jan 24 '12 at 18:33
  • I am writing out HTML. Can you point me at a better method? – TJS101 Jan 24 '12 at 18:42
  • Any idea why the CSS disappears? – TJS101 Jan 24 '12 at 18:49
  • (@user1150866. You have asked 5 questions here. Have you considered choosing a username? That would be nice I think). – r4. Jan 24 '12 at 20:28
  • @user1150866: I already told you why the CSS disappears: *`document.write` will replace the whole document*. See my answer [here](http://stackoverflow.com/questions/8991594/reapply-style-after-adding-content-with-javascript). At least, this *could* be the problem. Unfortunately your code is a bit... chaotic, which makes it difficult to analyze. If you'd create a http://jsfiddle.net demo, as I already said in my first comment, we could help better. The more effort you put in your question, the more help you will get. – Felix Kling Jan 25 '12 at 11:38
  • Re-wrote the thing to use DOM. Works. Genius. – TJS101 Jan 26 '12 at 15:59

2 Answers2

2

In "domenu" function you are return a variable hhgselect. But this variable is not used in that function also not initialized via php.Please verify that.

sathishkumar
  • 1,780
  • 4
  • 20
  • 31
0

The document.write function should be replaced with:

document.getElementById(divname).InnerHTML = "contents" method.

So that is what I did and it works fine now.

Matt Wilko
  • 26,994
  • 10
  • 93
  • 143
TJS101
  • 490
  • 1
  • 7
  • 19