- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在网站上使用 UpdatePanels 时遇到了重大问题。问题是,当我使用 ScriptManager 时,一旦更新面板回发,最初加载页面时处于事件状态的所有客户端 JavaScript 都会丢失。
这是我正在尝试做的...
我在同一页面上有许多 .net 日历控件,每个控件都在其自己的更新面板中。日历最初是隐藏的,直到您在关联的文本框内(也在更新面板内)单击,此时日历会弹出,以便您选择一个日期。在您实际更改日期(回发)之前,它们的日历一直很好用,之后当您在文本框内单击时日历不再弹出,“onfocus”JavaScript 丢失。
在谷歌上搜索了好几个小时后,我可以通过向 TextBox 动态添加“onfocus”属性并在日历回发时使用 ScriptManager 注册启动脚本来让事情半工作。
例子:
TextBox1.Attributes.Add("onfocus", "document.getElementById('searchArrivalDateCalendarDiv').style.display = 'block';")
ScriptManager.RegisterStartupScript(Page, GetType(Page), "StopTxtClick", "$(document).ready(function(){$('.txtArrivalDate').click(function(event){event.stopPropagation(); $('div.searchArrivalDateCalendarDiv').show(); });});", True)
这似乎真的不切实际,尤其是当我引入母版页时。我最终将不得不重新注册一大堆启动脚本。
一定有更简单的方法吗?
最佳答案
看起来您想使用事件委托(delegate)。主要思想是事件冒泡,因此您可以将事件处理程序附加到更新面板之外(可能附加到更新面板所在的 div 或表)。此处理程序负责它接收到的所有事件,因此即使您的更新面板回发并呈现新的文本框,您也不需要重新附加事件处理程序。当新文本框引发其事件时,您现有的事件处理程序可以尝试处理它。
以下只是在 javascript 中进行事件委托(delegate)的一种方法(使用 jquery 并取自 http://www.danwebb.net/2008/2/8/event-delegation-made-easy-in-jquery )
jQuery.delegate = function() {
return function(e) {
var target = $(e.target);
if (target.attr("showCalendar")) {
var calendar = $("#" + target.attr("showCalendar"));
calendar.css("display", "block");
}
}
}
$(document).ready(function()
{
$('#test').click($.delegate());
});
<form id="form1" runat="server">
<asp:ScriptManager runat="server" EnablePartialRendering="true"/>
<div id="test" style="width:100%;">
<asp:UpdatePanel runat="server">
<ContentTemplate>
<input type="text" id="testText" showCalendar="testCalendarDiv" />
<div id="testCalendarDiv" style="display:none;">
<asp:Calendar runat="server" ID="testCalendar1"/>
</div>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
在这个简单的示例中,我在单击此 div 时注册了委托(delegate)方法(文本框和日历位于此 div 内)。当您单击文本框时,单击事件会冒泡到 div。委托(delegate)方法被调用,我检查引发事件的元素的 showCalendar 属性。如果这个属性存在,我找到这个属性指向的元素并更新它的显示样式。这是一个非常简单的示例,但您可以轻松地扩展委托(delegate)方法以接收它将根据您注册的某种规则调用的函数。
关于javascript - ASP.Net ScriptManager 和 UpdatePanel 在回发后忽略 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2230471/
我在 asp.net 页面中有一些更新面板。我希望 updatepanel 2 在 updatepanel 1 刷新时刷新,但 UpdatePanel 2 的 UpdateMode 属性设置为 Con
我的 ajax 页面上有两个更新面板。这是我第一次使用 updatepanel,我不知道出了什么问题。我认为只有 btnFilter 的 Click 事件必须触发第二个更新面板的内容,但更改组合值(也
如果有 UpdatePanel在另一个 UpdatePanel ,并且在内部的UpdatePanel 中有一个按钮,我想点击这个按钮时,只刷新内部UpdatePanel .如何 ? 最佳答案 在inn
我正在将 ASP.NET 应用程序从 3.5SP1 移植到 4.0。该应用程序在 3.5SP1 中完美运行。在 4.0 中,我发现 UpdatePanel 行为有所不同。 我们有一个简单的用户控件,其
我已经复制并粘贴了这个警报类: http://madskristensen.net/post/JavaScript-AlertShow%28e2809dmessagee2809d%29-from-AS
我正在使用 C# 的 ASP .NET 4.0。我有一个 Web 表单,其中所有布局都存在于 UpdatePanel 中。里面有以下内容: 用于通过文本框和搜索按钮输入搜索条件的面板 使用动画 .gi
我需要在 UpdatePanel upSectionB 中添加 LinkButton btnAddRow 但问题是我在加载期间遇到此错误: A control with ID 'btnAddRow
我有一个带有 Ajax 选项卡控件的页面,其中一个选项卡中有一个 Web 控件,它是 Telerik RadGrid,其中编辑表单指向另一个 Web 控件。该编辑表单还包含 Ajax 选项卡,并且在其
我有一个带有一些复选框的 UpdatePanel。我检查它们,然后点击我的保存按钮,但这会导致 UpdatePanel 回发(刷新)并将它们全部设置回空白。重绘方法在按钮代码之前运行。 拥有可以操作的
我有很多地方......构造就在它所作用的元素之后进行(以确保在显示 HTML 之前立即对其进行处理)。一切正常。 现在我开始使用asp:UpdatePanel和一些标签在里面。我设置Visible=
我在使用 UpdatePanels 的同一个 asp.net 页面上有这个函数 $(function() { $("#listTimeInput").change(function() {
我有一个 UpdatePanel,用于替换页面内的内容。在 UpdatePanel 之外,我有一些 jQuery 使用 on() 函数来分配一些按钮点击。据我了解the new jQuery.on()
我已经将 Jquery 用于圆角(DIV),并且我有一个更新面板,其中包含一个数据列表,其中包含一些图像和一个删除链接。当我单击删除链接时,它会触发删除命令并删除图像。(异步回发)。问题是当我单击删除
考虑以下场景: MasterpageFile1: 嵌套母版页文件:
我目前正在尝试对位于 AJAX UpdatePanel 内的 GridView 使用“colResizable”。第一次加载时,它运行良好,但每当 UpdatePanel 更新时,它就会停止。 我知道
我只是想做空 this question's example通过制作一个简短的原型(prototype)来测试 UpdatePanel 功能,以禁用单击链接按钮时重新加载 ASP.NET 页面。我在像
我有一个相当复杂的 UI 页面,其中嵌套了多个 UpdatePanel。所有这些都设置为 UpdateMode = "Conditional" 我在所有更新面板之外都有一个列表框。奇怪的是,当单击 U
我正在阅读一篇显示 how bad CodePlex uses UpdatePanels 的文章以及 StackOverflow 在这个问题上有多好,例如,当用户赞成一个答案/问题时。 我想知道是否有
闲置 2 分钟后,在页面上呈现更新面板所需的时间大约是之前的 3 倍。我知道这可能是应用程序池设置的问题,但是有没有办法通过定期从页面与服务器联系来避免该问题? 最佳答案 你想做的是这样的 -> fu
我是一名优秀的程序员,十分优秀!