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

x
?
Solved

Loading a function when a hyperlink is clicked

Posted on 2003-11-14
8
Medium Priority
?
495 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
Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

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

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

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

Question has a verified solution.

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

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…
When it comes to security, close monitoring is a must. According to WhiteHat Security annual report, a substantial number of all web applications are vulnerable always. Monitis offers a new product - fully-featured Website security monitoring and pr…
Integration Management Part 2
Whether it be Exchange Server Crash Issues, Dirty Shutdown Errors or Failed to mount error, Stellar Phoenix Mailbox Exchange Recovery has always got your back. With the help of its easy to understand user interface and 3 simple steps recovery proced…

824 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