-1

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
8
  • the problem is this part... onclick="SubmitAge(66, 'ctl00_MainContent_arTo_upAgeRange')" (this is as printed on the client source Commented Dec 30, 2009 at 22:41
  • Does this really have anything to do with asp.net, C#, Ajax, or vb.net? Commented Dec 30, 2009 at 22:45
  • Depending on the context of the question this might be a syntax mixup between ASP.NET server tags, JavaScript/HTML syntax, and C#/VB.NET syntax. We'll have to see some more code first. Commented Dec 30, 2009 at 22:46
  • this is all as printed in the html source as i did a viewsource in internet explorer... @matrixfrog... and i am coding in vb/c# asp.net & ajax (updatepanel) so it is all relevant depending on teh questions i get Commented Dec 30, 2009 at 22:54
  • Where is the JavaScript function defined? In the same page? In a referenced JS file? This error could happen if the SubmitAge method can't be found, and thus it would itself be null. Commented Dec 30, 2009 at 22:56

2 Answers 2

1

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: ASP.NET dynamically insert code into head

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

// Register a script reference: 
Page.ClientScript.RegisterClientScriptInclude(GetType(), "myLibraryScript", "~/Scripts/MyScriptLibrary.js"); 
Sign up to request clarification or add additional context in comments.

11 Comments

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)
Try this, then: onclick="alert(SubmitAge)" And see what happens. That'll tell you if SubmitAge is defined.
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>
now, AgeRange.js is in the same directory as AgeRange.ascx however, the container aspx file is in a directory above, surely this shouldn't matter?
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.
|
0

here is how i decided to do it, ResolveClientURL is important, static link will not always work, also the if check will prevent the script being added several times in one page if you use the control multiple times on same page...

    If Not Page.ClientScript.IsClientScriptIncludeRegistered("AgeRangeJS") Then ' no point in registering it twice!
        ' AND its registered in the header, where it should be, not two copies in the body :)
        Page.ClientScript.RegisterClientScriptInclude("AgeRangeJS", ResolveClientUrl("AgeRange.js")) ' ResolveClientUrl("AgeRange.js")
    End If

2 Comments

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).
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).

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.