我有一个由服务器生成的页面部分,其中包括由服务器编写的内联javascript(这是ASP.NET Webforms)。这个JavaScript用于将onchange事件绑定到我的下拉列表中,该下拉列表位于$(document).ready()中。
在页面加载时打开我的页面部分时,将触发$ {document).ready(),并且下拉列表已正确绑定。但是,如果在页面加载时未打开该部分(即我必须单击“扩展”按钮,该按钮会与服务器联系以构建和加载页面部分),则不会触发内联脚本。
基本上,区别在于,在一种情况下,<script>
标记位于加载的初始html中,而在另一种情况下,在页面加载后,将<script>
标记附加至初始html。
这是内联脚本:
<script type="text/javascript">
alert('hi inline!');
$j(document).ready( function(){
var $emailNameHidden = $j('#hidden_TargetedEmailName');
$emailNameHidden.on('change', function(){
van.TargetedEmails.loadTestCaseNameSelect($emailNameHidden.val());
});
});
</script>
我添加了警报以查看是否可以通过将其放置在$(document).ready()之外来触发,但是该警报也仅在脚本包含在初始页面加载中时才触发。
将内联脚本添加到页面后,如何触发它?
旁注:我尝试将这些内容放入页面部分中包含的外部JS文件中,但是当我尝试将下拉列表绑定到外部文件中时,该绑定在下拉列表加载完成之前触发,因此它没有被绑定,当我将绑定放入$(document).ready()时,没有触发$(document).ready()。
最佳答案
只需将客户端逻辑移至pageLoad
事件即可。
每当页面加载到浏览器中时,即每次回发(ajax或非ajax)后以及初始加载时,ASP.Net框架都会自动触发此JavaScript事件。当您在ASP.Net中进行Ajax发布时,不会触发来自jquery的文档就绪事件,但是即使进行了Ajax发布,也会触发pageLoad
事件。
function pageLoad() {
//put the document.ready logic here
}