1

我在 UpdatePanel 内的 MultiView 中有一个 div。当我单击 UpdatePanel 内的按钮时,将执行回调并显示 div,但它不会在鼠标悬停时改变其颜色(jquery 不起作用)。

如果我将 div 放在 UpdatePanel 之外,则 jquery 可以正常工作。

这里可能是什么问题?

谢谢

<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;
    }
4

5 回答 5

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 对象还不存在。

于 2011-05-04T14:32:04.047 回答
3

尝试使用.live,因为第一次加载文档时 div 不在页面上:

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

如果您想在悬停后做一些不同的事情,请尝试同时绑定 mouseover 和 mouseout:

$('#MyDiv').live('mouseover mouseout', function(event) {
  if (event.type == 'mouseover') {
    // do something on mouseover
  } else {
    // do something on mouseout
  }
});
于 2011-04-19T16:14:46.787 回答
2

我相信更新面板会异步引入内容,这意味着它会在document.ready事件触发后放置在页面上。因此,您在该事件已经发生后绑定到该事件。尝试剥离该document.ready部分并查看是否有效。

编辑:或者只是live按照其他人的建议使用。这可能是最好的。我很确定我的推理是正确的,为什么它不起作用!

于 2011-04-19T16:15:52.787 回答
1

问题是在div创建时,jquery 脚本已经运行。尝试使用jquery live方法绑定到鼠标悬停和鼠标移出属性

于 2011-04-19T16:15:16.913 回答
0

另一件事也可能是 .Net 正在重写您的元素的 id,因此您的 jquert 无法找到正确的 id

使用 .Net Web 表单尝试在 jquery 中使用以下选择器$("[id$='MyDiv']")

于 2011-04-19T16:36:40.307 回答