Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 627
  • Last Modified:

javascript timer over multiple pages

I was shown the code below by another expert, and it's worked wonderfully for the parts where i needed to just send the time spent on one page to the database.

However, there are a few pages where it would be easiest that it keeps the time over a number of pages.  I have a learning section for this module/quiz where there are different pages of information they can review before taking the test questions.  I want to know how long they spend looking at those pages, they can move freely between the 5 pages until they click the finished link in the navigation.

Is there a way to accomplish what i'm looking to do? Thanks for any help.
<script>
var currentTime = new Date();
var startTime = currentTime.getTime();

function getElapsedTime()
{
	var endTime = new Date();
	var elapsedTime = (endTime.getTime() - startTime);
	form1.elapsedTime.value = elapsedTime;
}
</script>



<form id=form1 target=_blank>
<input type=hidden name=elapsedTime>
<input type=submit onclick="getElapsedTime()">
</form>

Open in new window

0
newmie22
Asked:
newmie22
  • 3
  • 3
1 Solution
 
sjklein42Commented:
How are you saving the partial answers from each page within the set of five until the user finally clicks the finished link?  Cookies?

Related question - How do you gather up the answers from all five pages into one form?

We need to (essentially) save the startTime variable along with the other partial answers.

Need to see more of your code.



0
 
newmie22Author Commented:
the 5 pages that i want to gather time info for are just teaching pages, they is no user interaction besides reading, but for the purposes of comparison for the study, i want to see how long it takes the user to absorb the information.

Essentially there 4 pages with information like the code below and the navigation has a finished button/page where they'll leave the learning section and proceed to the 'test'
<?php
session_start();
?>

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="utf-8">
        <meta name="viewport" content="width=device-width; height=device-height; initial-scale=1;">
        
        <title>Digital Natives Testing Module</title>
        
        <link rel="stylesheet" type="text/css" href="styles.css" />
               
        <!--[if IE]>
        
        <style type="text/css">
        .clear {
          zoom: 1;
          display: block;
        }
        </style>

        
        <![endif]-->
        
    </head>
    
    <body>

    	<section id="page"> <!-- Defining the #page section with the section tag -->
    
            <div class="header"> <!-- Defining the header section of the page with the appropriate tag -->

                <h1>Test A</h1>
                <p>&nbsp;</p>
                <nav> <!-- The nav link semantically marks your main site navigation -->
              		<ul>
                        <li><a href="testA-overheat.html">OVERHEAT</a></li>
                        <li><a href="testA-jammed.html">JAMMED</a></li>
                        <li><a href="testA-continue.html">CONTINUE</a></li>
                        <li><a href="testA-stop.html">STOP</a></li>
                        <li><a href="testA-finished.html">FINISHED</a></li>
                    </ul>
                </nav>
            
            </div>
            
            <section id="articles"> <!-- A new section with the articles -->

				<!-- Article 1 start -->

                <div class="line"></div>  <!-- Dividing line -->
                
                <div class="article" id="article1"> <!-- The new article tag. The id is supplied so it can be scrolled into view. -->
                    <h2>jammed</h2>
                    
                    <div class="line"></div>
                    
                    <div class="articleBody clear">
                    
                    <div class="figure"> <!-- The figure tag marks data (usually an image) that is part of the article -->
	                    	<img src="img/a_jammed.png" alt="jammed" />
                    </div>
                    
                      <p>If the machine gets a part stuck in the belt, this may damage the machine. When the machine displays a triangle, this indicates that it is jammed and the belt needs to be cleared.</p>
</div>
                </div>
                
				<!-- Article 1 end -->


            </section>

        <footer> <!-- Marking the footer section -->

          <div class="line"></div>
        
        </footer>
            
		</section> <!-- Closing the #page section -->
        
    </body>
</html>

Open in new window

0
 
sjklein42Commented:
I think I have the answer.  It is a little hard to explain, but not really that complicated.

Here's my suggestion.  As the user goes from page to page, we pass the cumulative elapsed time as part of the URL (CGI argument).  So the links are dynamically patched to look like this:

testA-overheat.html?st=14407

The trick is, that the CGI argument is actually client-side only (browser) and can be tacked onto a plain old HTML page's URL without bothering the server.  Each of the four pages has javascript that looks to see if there is a "st" switch, and, if so, starts with that as the elapsed time instead of zero.

Then, when the "FINISH" link is taken, there is a CGI parameter ("st") that communicates the total elapsed time for the whole set of pages to the Finish CGI script, which logs it and goes onto the next part of the test.

To try this out, save multiple copies of this code as "testA-overheat.html", "testA-jammed.html", and so on for your four pages.  The Finish page is going to be different since that is when you want to record the total elapsed time.

Starting with any one of the pages, click the links to go from page to page and watch the URL in the address field.  It should show the cumulative elapsed time.

<script>
var currentTime = new Date();
var startTime;

var loc = window.location+"";
var xx = loc.split("?");
if (xx[1] != null) { startTime = currentTime.getTime() - xx[1].substr(3,10); }
else               { startTime = currentTime.getTime();                      }

function chainToPage()
{
    var endTime = new Date();
    var elapsedTime = (endTime.getTime() - startTime);
    form1.st.value = elapsedTime;
    form1.submit();
}
</script>



<form id=form1 action="testA-overheat.html"><input type=hidden name=st></form><a href=# onclick="chainToPage()">OVERHEAT</a>
<form id=form1 action="testA-jammed.html"><input type=hidden name=st></form><a href=# onclick="chainToPage()">JAMMED</a>
<form id=form1 action="testA-continue.html"><input type=hidden name=st></form><a href=# onclick="chainToPage()">CONTINUE</a>
<form id=form1 action="testA-stop.html"><input type=hidden name=st></form><a href=# onclick="chainToPage()">STOP</a>
<form id=form1 action="testA-finished.html"><input type=hidden name=st></form><a href=# onclick="chainToPage()">FINISHED</a>

Open in new window

0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
newmie22Author Commented:
ok, i think i get what you're saying.  I see you have the code in the form tags.  The links i have in my code are <nav> tags with ul lists, would i need to change them to be form tags to get the timer results i'm looking to achieve?
0
 
sjklein42Commented:
Yes, they need to be form tags to get the hidden attribute added to the URL.  The form itself is totally invisible and the a-href tag activates it, so the user is still clicking on a normal-looking link.

I think you can make it look the same on the page.

0
 
newmie22Author Commented:
Great, thanks for the help!
0

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 3
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now