1

我知道没有这样的事件,但是我可以使用类似的东西吗?

我有 ASP.NET 用户控件,它们动态加载到容器中,效果非常流畅。

这样做的缺点是我想在控件完成加载时运行一些客户端 javascript,但我不知道如何。

我花了一段时间才弄清楚为什么我的 jQuery 脚本没有运行,然后我意识到它们只是在运行,$(document).ready()而且只有在整个页面加载时才会发生!(呃!)

谁能想到这样做的方法?

谢谢 :)


现在变得更复杂了!

我正在尝试使用 DOM Mutation Observer 来观察容器,以便在它发生变化时运行脚本。

但我收到一个错误:An attempt was made to reference a Node in a context where it does not exist.

DOM 元素确实存在,但我不确定我是否正确理解了错误。

这是我的观察者代码:

$(document).ready(function () {

    // select the target node
    var target = $('#contentPanel');

    if (typeof (target) != 'undefined') {
        // create an observer instance
        var observer = new MutationObserver(function (mutations) {
            mutations.forEach(function (mutation) {
                console.log(mutation.type);
                if (mutation.addedNodes) {
                    alert('New nodes');
                }
                //rememberMe();
            })
        });

        // configuration of the observer:
        var config = { attributes: false, childList: true, characterData: true }

        // pass in the target node, as well as the observer options
        observer.observe(target, config); // <== error occurs here
    }
});

最终的观察者代码:

$(document).ready(function () {

    // select the target node
    var target = $('#contentPanel');

    if (typeof (target) != 'undefined') {
        // create an observer instance
        var observer = new MutationObserver(function (mutations) {
            var doRememberMe = false;
            mutations.forEach(function (mutation) {
                if (mutation.addedNodes) {
                    doRememberMe = true;
                }
            })
            if (doRememberMe) rememberMe();
        });

        // configuration of the observer:
        var config = { attributes: false, childList: true, characterData: true }

        // pass in the target node, as well as the observer options
        //observer.observe(target, config);
        observer.observe(document.body, config); // <== apply observer to whole document! (could be done nicer)
    }
});
4

2 回答 2

2

明白了,在这种情况下,请在容器末尾尝试此操作(您可以在单独的 JS 文件中定义 CallLoadedEvent):

<asp:Panel id="Container" runat="server">
   <!-- controls dynamically load here -->
   <script>
      CallLoadedEvent();
   </script>
</asp:Panel>
于 2013-09-27T16:34:50.770 回答
0

最终能够使用上面添加的 DOM Mutation 代码让它工作。

但是,唯一可行的方法是如果我将侦听器应用于整个文档。

由于某种原因,我无法将其仅应用于正在修改的元素;也许由于某种原因它超出了范围,即使我能够首先测试它的存在!那好吧。

于 2013-09-30T13:35:57.797 回答