views:

91

answers:

2

calling a js function using onclick...

onclick="SubmitAge(66, 'ctl00_MainContent_arTo_upAgeRange')" 

function just calls an updatePanel from the client... but its saying object expected at the onclick= part!!!

here is the function, is there anything wrong with the code?

function SubmitAge(age, UpdatePanelID) {
    $get('HiddenAge').value = age;
    __doPostBack(UpdatePanelID);
}

EDIT: THE SUBMITAGE FUNCTION IS INSIDE A .JS FILE (AGERANGE.JS) AND ONLY WHEN MOVED HERE DOES IT STOP WORKING: HERE IS THE LINKING METHOD/HEADERS FROM THE ASCX USERCONTROL INWHICH IT IS ALL CONTAINED...

%@ Control Language="VB" ClassName="AgeRange" %

%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="AjaxCT" %

script src="AgeRange.js" type="text/javascript" /script

(arrow tags removed here as it wont display, hint: stackoverflow!!!)

im printing it like this from the server...

Public Sub AppendToSB(ByRef sb As StringBuilder, ByVal CurNo As Byte, Optional ByVal clickedNo As Byte = 0)
    Dim sConfirmClick = ""

    If clickedNo = CurNo Then   ' maybe dont make it clickable...
        sConfirmClick = "return confirm('The number " & CurNo.ToString & " is already selected, are you sure you want to select it again?');"
    End If

    sb.Append("<a href=""#"" onclick=""" & sConfirmClick & "SubmitAge(" & CurNo.ToString & ", '" & upAgeRange.ClientID &
     "')"" runat=""server"">" & CurNo.ToString & "</a>")

End Sub
+1  A: 

Complete rewrite of my post after several clarifications:

The problem is that the ASPX page is referencing an ASCX user control that is located in a different folder. That ASCX control has an HTML <script> tag that is using a relative path to the JS file.

The solution is to correctly resolve the URL to the JS file by using some extra code:

<script src="<%= ResolveClientUrl("MyScriptLibrary.js") %>" type="text/javascript">
</script>

To prevent the script file from being referenced multiple times I recommend using the approaches specified in this other post: http://stackoverflow.com/questions/1982099/asp-net-dynamically-insert-code-into-head/1982116#1982116

Here's what it looks like in the user control's code:

// Register a script reference: 
Page.ClientScript.RegisterClientScriptInclude(GetType(), "myLibraryScript", "~/Scripts/MyScriptLibrary.js"); 
Eilon
its a html tag... so once i click the html tag <anchor> in this case, it updates updatePanel from a js function inside a js file (submitAge)
Erx_VB.NExT.Coder
Try this, then: onclick="alert(SubmitAge)"And see what happens. That'll tell you if SubmitAge is defined.
Eilon
tried it, wow, the function fails, i wonder why? this is my link tag in the user control...<%@ Control Language="VB" ClassName="AgeRange" %><%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="AjaxCT" %><script src="AgeRange.js" type="text/javascript"></script>
Erx_VB.NExT.Coder
now, AgeRange.js is in the same directory as AgeRange.ascxhowever, the container aspx file is in a directory above, surely this shouldn't matter?
Erx_VB.NExT.Coder
I think I'm even more confused now. Can you update the original post with more complete information? Please show as much code as you can from the ASPX, the code behind, the JavaScript files, and anything else that you have.
Eilon
done, ive updated the post... somethign to do with the .js file, stops working when js function is moved ot the js file
Erx_VB.NExT.Coder
Thanks for updating the post. It's still not clear to me exactly how the .JS file is being referenced (either directly or indirectly) from the main ASPX file. Are you saying that the ASPX is using an ASCX, and that the ASCX has a reference to the JS file? If so, please show that code and markup as well since at the moment that looks like the most likely cause of this issue.
Eilon
yes that is exactly how it is.... ascx has ref to js file, aspx does not... aspx just has the ascx usercontrol inside it... however, i still see the script js ref printed out in the html source (in the body) of the aspx output html... not the header
Erx_VB.NExT.Coder
Then maybe it is related to the script tag pointing at a path relative to the ASCX control and not relative to the ASPX page. To make sure it's always the right path do this: <script src="<%= ResolveClientUrl("myscript.js" %>" ...>.
Eilon
wow, that worked, thanks so much for your help... also found some other ways to do it but yours looks nicer...http://stackoverflow.com/questions/280201/external-js-file-in-web-user-control
Erx_VB.NExT.Coder
if i add the usercontrol twice in the page, this is being printed out twice in the body, what method would you recommend?
Erx_VB.NExT.Coder
I updated this post with a completely rewritten response.
Eilon
A: 
Erx_VB.NExT.Coder
BTW there's no need to check for IsClientScriptIncludeRegistered. ASP.NET will automatically exclude duplicates. That method is almost never needed. It really only needs to be used if you need to make some *other* decision based on whether a script was already registered (though I have no idea when that would ever happen).
Eilon
ahh thanks eilon, will remove that... just wanted to say, using this without the resolveclienturl didn't work for me, even tho the orig poster i believe suggested this should work from the userControl itself... (unless im mistaken and they meant for it to work from the aspx page).
Erx_VB.NExT.Coder