2009-12-30 44 views
0

使用的onclick調用JS功能...JavaScript的問題

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

函數只是從客戶端調用一個UpdatePanel ...但預期的onclick =部分的話說對象!

這裏是函數,代碼有什麼問題嗎?

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

編輯:SUBMITAGE函數內部.js文件(AGERANGE.JS),只有當搬到這裏它停止工作:這裏是聯法/ HEADERS FROM THE ASCX用戶控件INWHICH這是所有包含的。 ..

%@控制語言= 「VB」 類名= 「AgeRange」 %

%@註冊大會= 「AjaxControlToolkit」 命名空間= 「AjaxControlToolkit」 的TagPrefix = 「AjaxCT」 %

SCRIPT SRC = 「AgeRange.js」type =「text/javascript」/ script

(箭頭標記這裏移除它不會顯示,提示:計算器!!!)

IM從服務器打印它像這樣...

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 
+0

問題是這部分...的onclick =「SubmitAge(66‘ctl00_MainContent_arTo_upAgeRange’)」(這是客戶端源 – 2009-12-30 22:41:51

+0

作爲印刷這是否真的有什麼關係asp.net,C#,阿賈克斯,還是vb.net? – MatrixFrog 2009-12-30 22:45:07

+0

根據問題的上下文,這可能是ASP.NET服務器標記,JavaScript/HTML語法和C#/ VB.NET語法之間的混合語法。我們必須先看到更多的代碼。 – Eilon 2009-12-30 22:46:01

回答

1

我的帖子完全重寫幾經澄清:

問題是ASPX頁面引用位於不同文件夾中的ASCX用戶控件。 ASCX控件具有HTML <script>標記,該標記使用JS文件的相對路徑。

的解決方案是通過使用一些額外的代碼正確解析URL JS文件:

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

爲了防止腳本文件被多次引用,我建議使用此其他職位規定的方法: ASP.NET dynamically insert code into head

下面是它看起來像在用戶控件的代碼:

// Register a script reference: 
Page.ClientScript.RegisterClientScriptInclude(GetType(), "myLibraryScript", "~/Scripts/MyScriptLibrary.js"); 
+0

其html標籤...所以一旦我點擊html標籤在這種情況下,它更新js文件中的js函數更新updatePanel(submitAge) – 2009-12-30 23:01:32

+0

試試這個,然後: onclick =「alert(SubmitAge)」 看看會發生什麼。這會告訴你SubmitAge是否被定義。 – Eilon 2009-12-30 23:05:42

+0

試了一下,哇,功能失敗,我不知道爲什麼?這是在用戶控制我的鏈接標籤... <%@控制語言= 「VB」 類名= 「AgeRange」 %> <%@註冊大會= 「AjaxControlToolkit」 命名空間= 「AjaxControlToolkit」 的TagPrefix = 「AjaxCT」 % > 2009-12-30 23:11:18

0

這裏是我如何決定做的,ResolveClientURL是重要的,靜態鏈接將不會總是工作,如果檢查將阻止腳本被添加多次在一個頁面中,如果您在同一頁上多次使用控件...

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 

+0

BTW沒有必要檢查IsClientScriptIncludeRegistered。ASP.NET會自動排除重複的。這個方法幾乎是從不需要,只有在需要根據腳本是否已經註冊來做出其他決定時才需要使用它(儘管我不知道何時會發生這種情況) – Eilon 2009-12-31 00:35:05

+0

ahh thanks eilo ñ,將刪除...只是想說,使用這個沒有resolveclienturl沒有爲我工作,即使是我認爲這個應該從userControl本身工作的原始海報......(除非我錯了,他們的意思爲它從aspx頁面工作)。 – 2009-12-31 01:10:41