在 ScriptManager.RegisterStartupScript 后面的代码中调用脚本后,jQuery document.ready 不会触发

Posted

技术标签:

【中文标题】在 ScriptManager.RegisterStartupScript 后面的代码中调用脚本后,jQuery document.ready 不会触发【英文标题】:jQuery document.ready doesn't fire after script called in code behind ScriptManager.RegisterStartupScript 【发布时间】:2015-06-09 14:15:52 【问题描述】:

我有一个使用 https://mixitup.kunkalabs.com/ 过滤的项目列表

例如查看屏幕

然后用户选择添加另一个操作 - 这使用 fancybox 作为弹出窗口并向用户显示下一个图像:

用户添加数据后,页面会使用更新面板进行部分回发。然后代码从后面的代码中调用一个 js 函数来关闭弹出窗口,然后调用 mixitup 函数来重新初始化列表,因为它现在有一个新项目,但它不起作用。

下面是调用js的代码

ScriptManager.RegisterStartupScript(Me, [GetType](), "Load", "ReloadData();", True)

这里是要调用的js:

function ReloadData() 
    parent.jQuery.fancybox.close();
    $(document).ready(function () 
        $('#Container').mixItUp(layout: display: 'block');
    );

fancybox 关闭,但 mixitup 从未被触发,因为它从未通过 docment.ready 测试,这意味着它没有加载,因此无法运行 jQuery,但我不确定为什么?

【问题讨论】:

【参考方案1】:

$(document).ready() 在文档完成渲染后触发。因此,如果您已经呈现了您的页面并且现在正在与它进行交互,那么该 ready 语句将不再具有任何相关性,直到您重新加载页面。所以,不要把它放在一个函数中。

只需在功能块内调用您的mixItUp 代码。

function ReloadData() 
    parent.jQuery.fancybox.close();
    $('#Container').mixItUp(layout: display: 'block');

作为一个建议:如果您已经在使用 jQuery,请不要使用更新面板。只需通过 $.ajax 进行 ajax 调用。

【讨论】:

【参考方案2】:

您应该将以下代码放在ReloadData() 函数之外。

$(document).ready(function () 
        $('#Container').mixItUp(layout: display: 'block');
    );

文档就绪功能应始终保持在顶层。另外请检查加载页面时是否有任何JS错误。

【讨论】:

以上是关于在 ScriptManager.RegisterStartupScript 后面的代码中调用脚本后,jQuery document.ready 不会触发的主要内容,如果未能解决你的问题,请参考以下文章

NOIP 2015 & SDOI 2016 Round1 & CTSC 2016 & SDOI2016 Round2游记

秋的潇洒在啥?在啥在啥?

上传的数据在云端的怎么查看,保存在啥位置?

在 React 应用程序中在哪里转换数据 - 在 Express 中还是在前端使用 React?

存储在 plist 中的数据在模拟器中有效,但在设备中无效

如何在保存在 Mongoose (ExpressJS) 之前在模型中格式化数据