我在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;
}
答案 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']")
中使用以下选择器