2012-05-15 45 views
3

我在我的頁面上有一堆在運行時動態添加的div。 當任何動態添加的div被點擊 - 所有需要在我的代碼後面調用相同的功能。每個div必須將它自己的ID傳遞給函數。 我無法使用網絡方法,因爲該功能需要識別哪個div被點擊,然後顯示/隱藏/填充頁面上的其他控件。我可以通過div onclick事件調用函數後面的代碼嗎?

乾杯傢伙

頭控制和東西放在這裏
<div id="div_Footer" class="HoverEdit" title="Click To Edit" runat="server" onclick="EditDiv(div_Footer)"> 
     Footer Controls and stuff go here 
    </div> 

,然後在後面的代碼:

Sub EditDiv(ID_ofDiv As String) 

    'Do some stuff to the controls on the page 
    'Swapping tabs, showing /hiding controls etc. 

End Sub 
+0

你能告訴我們代碼嗎? – coder

+1

http://forums.asp.net/t/1090438.aspx/1 –

+0

對不起 - 我編輯了我的帖子,指出需要調用函數的這些div是在運行時由用戶動態創建的。 – wotney

回答

3

我不習慣寫VB代碼,所以我的例子是在C#中,但也許它可以幫助你開始。 它可能不是實現這個最乾淨的方式,但我會試試看:

HTML

<div id="div_Footer" class="HoverEdit" title="Click To Edit" runat="server" onclick="EditDiv(this)"> 
     Footer Controls and stuff go here 
    </div> 

客戶

<script type="text/javascript"> 
function EditDiv(s,e){ 
var id = $(s).attr("id"); 
__doPostBack(id,id); 
} 
</script> 

服務器

private void Page_Load(object sender, EventArgs e) 
{ 
    var arg = Request.Form["__EVENTTARGET"]; 'this will be empty on your first page request, but if the user click a div it will cause a postback to server, so this event will be fired again and will contain the div ID. 

    if(arg != null) 
    { 
     string divID = (string)arg; 
     'call your method with the argument. 
    } 
} 

關於這方面更多的信息可以在這裏找到:

http://wiki.asp.net/page.aspx/1082/dopostback-function/

+0

乾杯羅布,我的問題之一是,用戶可以動態地添加這些div,所以我無法預測頁面加載是否會有1個控件或100個! – wotney

+0

我已經更新了我的答案,並根據您的需求進行了調整。 –

+0

感謝您使用此解決方案。我能夠做類似的事情來得到ListView對象中的一行的選定索引。你搖滾! – MadHenchbot

0

隨着從link幫助張貼@Tim Schmelter我嘗試以下。這是美妙的:

標記:

<div id="div1" runat="server" style="height:100px;width:100px;">click me</div> 

代碼:

public class MyPage 
     Inherits System.Web.UI.Page 
     Implements IPostBackEventHandler 

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) 
    div1.Attributes("onclick") = 
     Me.Page.ClientScript.GetPostBackEventReference(Me, "div1_clicki") 
End Sub 

Protected Sub Div1_Click() 
    'do your stuff 
    div1.InnerHtml="div1 clicked" 
End Sub 


'Private Members As IPostBackEventHandler 
Public Sub RaisePostBackEvent1(ByVal eventArgument As String) Implements 
        IPostBackEventHandler.RaisePostBackEvent 
    If eventArgument = "div1_click" Then 
      div1_click() 
     End If 
    End If 
End Sub 
+0

當用戶點擊導致事件失控的div內的子元素時,似乎存在一個不幸的錯誤 - 即使我使用UpdatePanel並且事件從不觸發,頁面也會刷新。 – sparebytes

0

您可以創建從JavaScript回傳。一種方法是製作一個按鈕或鏈接按鈕並向其添加單擊事件。 Add Style =「Display:none;」並強制Div將按鈕點擊回發。

<div id="div_Footer" class="HoverEdit" title="Click To Edit" runat="server" onclick="EditDiv(this)"> 
    Footer Controls and stuff go here 
</div> 
//Javascript 
function EditDiv() 
{ 
    // do your code 
    __doPostBack('ButtonAID','') 
} 

一個很好的解釋可以在下面的文章中找到。 ASP.NET postback with JavaScript

相關問題