使用应该在第一个页面加载和随后的Ajax返回时注册的JQuery。这个被应用的控件在更新面板中。现在我在做什么
在document.ready
和sys.application.add.load
中注册相同的函数,因此它适用于更新面板内的控件和更新面板外的控件。
$(document).ready(function () {
CheckMaxlength();
//If Text area is placed inside update panel then apply restriction for texarea size.
Sys.Application.add_load(function () {
CheckMaxlength();
});
});
我想知道在更新面板内部和更新面板外部的控件的确切工作方式
我不确定你想做什么,但我怀疑委派事件可能是你的答案。
委派事件的优点是,它们可以处理来自后代元素的事件,这些事件将在以后添加到文档中。通过选择在附加委托事件处理程序时保证存在的元素,您可以使用委托事件来避免频繁地附加和删除事件处理程序。
例如,您可以向所有文本区域添加功能,而不管它们何时使用
添加到页面中。$( "body" ).on( "click", "textarea", function() {
alert( $( this ).val() );
});
对于您的情况的第一个好处是,在任何时候添加到更新面板的任何文本区域都将获得委托功能。
此外,如果你想针对更新面板内和更新面板外的文本的不同行为,你也可以这样做。
$("body").on('click', 'textarea', function () {
alert( "outside" + $(this).val());
});
$(".update-panel").on('click', 'textarea', function () {
alert("inside: " + $(this).val());
//stop the event from propagating up to the body
event.stopPropagation();
});
另外,请注意,在运行此代码时,只需要准备好body
和upload-container
。它不需要文本区在那里,所以你不需要在Sys.Application.add_load
中运行这个。
当在UpdatePanel中使用控件时,您将需要使用ASP。. NET AJAX ClientScripts和事件,如Sys.Application。为加载事件监听器添加_load。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
$(document).ready(function () {
console.log('$(document).ready()');
})
</script>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<script>
function CheckMaxlength() {
console.log('Sys.Application.add_load()');
// Sys.Application.remove_load(pageLoadHandler);
}
Sys.Application.add_load(CheckMaxlength);
</script>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Button ID="Button1" runat="server" Text="PostBack" />
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>
系统。应用程序是由ScriptManager加载的,只有在ScriptManager准备好并加载了所有脚本后才能使用它。
使用UpdatePanel更新的内容由ScriptManager负责。它在每次更新后引发Sys.Application.add_load()客户端事件,请参阅AJAX客户端生命周期事件
Window: load事件和jQuery .ready()只会在HTML DOM准备好时触发。例如,第一次加载的页面。ASP。. NET AJAX更新不重新加载文档,它们只更新UpdatePanel中的内容。
如果你使用了突变观察者,你可能能够检测到DOM中的变化,即使使用UpdatePanels更新内容。