2011-04-19 53 views
1

我有一個多視圖是一個UpdatePanel內內一個div。當我點擊UpdatePanel內部的按鈕時,執行回調並顯示div,但不會在鼠標懸停時更改其顏色(jQuery不起作用)。jQuery的不工作及MultiView

如果我把股利在UpdatePanel外面的jQuery正常工作。

可能是什麼問題就在這裏?

感謝,因爲DIV是不是在頁面上時,該文件第一次加載你

<script src="jquery-1.5.2.min.js" type="text/javascript"></script> 
<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server"> 
</asp:ToolkitScriptManager> 
<script type="text/javascript"> 
    $(document).ready(function() { 
     $("#MyDiv").hover(function() { $(this).css({ 'background-color': 'Red' }) }); 
    });  

</script> 

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> 
    <ContentTemplate> 
     <asp:MultiView runat="server" ID="mvPopup"> 
      <asp:View ID="View1" runat="server"> 
       <div id="MyDiv">Some text here</div> 
      </asp:View> 
     </asp:MultiView> 
     <asp:LinkButton runat="server" OnClick="btnLink_Click" ID="btnLink" Text="Click here" /> 
    </ContentTemplate> 
</asp:UpdatePanel> 

protected void btnLink_Click(object sender, EventArgs e) 
    { 
     mvPopup.ActiveViewIndex = 0; 
    } 
+0

您的'.hover'事件只有一個函數。使用兩個(一個用於鼠標進入時,另一個用於離開時),或者使用'mouseover'。 – Blender 2011-04-19 16:14:24

回答

3

嘗試使用.live

$(document).ready(function() { 
     $("#MyDiv").live("hover", function() { $(this).css({ 'background-color': 'Red' }) }); 
    }); 

如果你想做些什麼徘徊後不同,嘗試結合鼠標懸停和鼠標懸停:

$('#MyDiv').live('mouseover mouseout', function(event) { 
    if (event.type == 'mouseover') { 
    // do something on mouseover 
    } else { 
    // do something on mouseout 
    } 
}); 
+0

+1啊!打敗我25秒。 – 2011-04-19 16:15:52

+0

謝謝你amurra! – Elistan 2011-04-19 16:37:12

+0

一個問題 - 如果我使用的每個()設置爲上的document.ready HTML elemens(寬度,高度,ECT)一些初始參數,它是如何能夠以像函數使用每個()(或一些當量)當我在document.ready之後加載內容時,在這種情況下使用live()? – Elistan 2011-04-19 17:23:17

1

問題是當012已經創建了,jquery腳本已經運行。嘗試使用jquery live方法綁定到鼠標和鼠標移出屬性

+0

謝謝joe_coolish,活法是一種很好的解決方案 – Elistan 2011-04-19 16:37:37

2

我相信,更新面板異步帶來內容,這意味着在事件觸發後將其放置在頁面上。因此,在事件發生之後,你對這個事件具有約束力。嘗試剝離document.ready部分,看看是否有效。

編輯:或者只是使用live作爲其他建議。這可能是最好的。我很確定我的推理是正確的,但爲什麼它不起作用!

+0

+是,你是對的。在兩個帳戶:) – 2011-04-19 16:25:10

+0

謝謝亞當泰爾森! – Elistan 2011-04-19 16:36:49

0

還有一件事也可能是.NET是重寫你的元素的ID,所以你jquert無法找到正確的ID

與.net web窗體嘗試jQuery的使用下面的選擇$("[id$='MyDiv']")

3

您可以使用Sys.Application.add_load事件處理程序在ajax回發完成後執行客戶端腳本。您可能不想將其包裝在Document Ready中,只需將jQuery代碼放在一個普通函數中,然後從AjaxLoadComplete()中調用它即可。

<asp:ScriptManager ID="ScriptManager1" runat="server"> 
</asp:ScriptManager> 
<script type="text/javascript"> 

    Sys.Application.add_load(AjaxLoadComplete); 

    function AjaxLoadComplete() { 
     //Call your jquery methods here 
    } 


</script> 

此外,請確保add_load()調用遵循scriptmanager標記。你不能把它放在標題中,因爲SYS對象還存在。