Solved

Loading a function when a hyperlink is clicked

Posted on 2003-11-14
8
466 Views
Last Modified: 2013-12-24
Hello Everyone,

I am having problems loading a function (logs the users visit to a page) when a user clicks on a hyperlink.  Here is the code I am using:

<a href="Some URL" target="_blank" onclick="<CFOUTPUT>#traffic("This is the title of the page","This is the URL of the page")#</CFOUTPUT>">My Link</a>

I have four more identical links and a few regular links.  The problem I am having is when any link is clicked (even the regular ones) the above code executes for every link, even though it was not the one being clicked.

Any help with this would be appreciated.
0
Comment
Question by:gardine
8 Comments
 
LVL 1

Expert Comment

by:tomkinite
ID: 9749606
Make sure your recordset (if you're using one) is moving to new records.  For example, if "This is the title of the page" is a value from a database, it should change while in a <CFOUTPUT QUERY=""> or a <CFLOOP QUERY="">.  Check the resulted source to verify that those 2 variables are actually changing.

Your method of logging isn't very practical, though.  For those with disabled, or unavailable Javascript, this method would not work.

You are also asking the browser to execute a CF function in an OnClick event.  I would hope to assume that the resulted #traffic()# function renders another Javascript function that the browser can use.  

I think what you are trying to do is execute a CF function when a user clicks a link, but CF renders completely before Javascript, therefore impossible.  Use the onClick event to run a typical Javascript UDF such as onClick="<cfoutput>userVisit('#titleofpage#','#urlofpage#')</cfoutput>".  This will be fairly hokey and I don't recommend it.  If all of your pages are CF pages, simply use Application.cfm to track page hits.  Application.cfm is a page you put in your root directory of your application.  CF will run Application.cfm before rendering the actual pages being requested.
0
 
LVL 17

Expert Comment

by:anandkp
ID: 9752898
Ur code can better go as :

<CFQuery name="x">
select * from table
</CFQuery>

<CFOUTPUT Query="x"><!--- gets u the links in the DB - as u mentioned u have 4 in ur case --->
       <a href="#Url#" target="_blank" onclick="#traffic('#Title#','#Url#')#">#LinkName#</a>
</CFOUTPUT>

& that shld be it !
0
 
LVL 4

Expert Comment

by:procept
ID: 9753289
Hi,

you are using #'s around the function name, do you want to call a CF function? You can't do that without sending the page back to the server. The CF function is executed server side, but, the click is executed by the user, client side. You can only call a function of a client side language, like JS for example.

HTH,

Chris
0
Comprehensive Backup Solutions for Microsoft

Acronis protects the complete Microsoft technology stack: Windows Server, Windows PC, laptop and Surface data; Microsoft business applications; Microsoft Hyper-V; Azure VMs; Microsoft Windows Server 2016; Microsoft Exchange 2016 and SQL Server 2016.

 
LVL 1

Author Comment

by:gardine
ID: 9780895
Thank you everyone for your advice.  I dont think I was specific enough.  I created the above function to create a log when a user visits a specific page (I do not want to track all of them).  So, for every page I would like to track I place the fonction in it.  This leads me to my problem.  When I link to a pdf file and open it in a new window I am unable to load my function.
0
 
LVL 1

Expert Comment

by:tomkinite
ID: 9780989
Wusage (www.boutell.com)

That's the high road.
0
 
LVL 1

Author Comment

by:gardine
ID: 9781007
High Road?
0
 
LVL 1

Accepted Solution

by:
tomkinite earned 50 total points
ID: 9781069
Yes.  Log Analyzer.  You really can't do this the way you explain.  CF is rendered BEFORE Javascript.  The OnClick event is a Javascript event.  Essentially you are telling Javascript to run a function that it has no perception of.  

To track ALL clicks you have 2 options.
1. Log Analyzer
2. Download Counter Script

Each link is a "download.cfm?file=file.pdf"

Download.cfm gets the file's size, etc, logs the download to the database and then shoots it to the user using CFHEADER and CFCONTENT.

I've done this "download.cfm" method before and could give you the code if you wish to do it this way.
0
 
LVL 1

Author Comment

by:gardine
ID: 9826288
Thank You.  I took the idea and created my own solution.
0

Featured Post

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Have you ever sent email via ColdFusion and thought of tracking this mail to capture the exact date and time when the message was opened ?  If yes, then this article is for you ! First we need a table user_email with columns user_id , email , sub…
Most ColdFusion developers get confused between the CFSet, Duplicate, and Structcopy methods of copying a Structure, especially which one to use when. This Article will explain the differences in the approaches with examples; therefore, after readin…
This Micro Tutorial will give you a basic overview how to record your screen with Microsoft Expression Encoder. This program is still free and open for the public to download. This will be demonstrated using Microsoft Expression Encoder 4.
Windows 10 is mostly good. However the one thing that annoys me is how many clicks you have to do to dial a VPN connection. You have to go to settings from the start menu, (2 clicks), Network and Internet (1 click), Click VPN (another click) then fi…

813 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now