Jquery不适用于MultiView

时间:2011-04-19 16:11:21

标签: jquery asp.net multiview

我在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;
    }

5 个答案:

答案 0 :(得分:3)

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

$(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
  }
});

答案 1 :(得分: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对象已经存在了。

答案 2 :(得分:2)

我相信更新面板会异步提供内容,这意味着在document.ready事件触发后它会放在页面上。因此,在事件发生之后,您将对该事件具有约束力。尝试剥离document.ready部分并查看是否有效。

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

答案 3 :(得分:1)

问题是当创建div时,jquery脚本已经运行。尝试使用jquery live方法

绑定鼠标和鼠标移除属性

答案 4 :(得分:0)

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

<。>使用.Net网络表单尝试在jquery $("[id$='MyDiv']")

中使用以下选择器