0

在 Windows 窗体应用程序中,我们有一个 Master.js 文件,在加载 modernizr 后会引用该文件。

我在 masterpage.js 底部的 $(document).ready 函数中声明了我的 modernizer.load 测试,它可以根据我需要的测试加载我的 js 文件。

IE

   $(document).ready(function () {
        Modernizr.addTest('mytest', $('section #myid').length > 0);    
        Modernizr.load({
            test: Modernizr.mytest,
            yep: ["custom1.js",
                "customjs2.js"],
            complete: {
                //do stuff
                }
            }
        });
    });

但是,我希望在 document.ready 和可能在这之后可能发生的 DOM 插入点上都进行此测试。Modernizr 或 jQuery 可以做到这一点吗?

我的目标是在我的 masterpage.js 中声明所有modernizr 测试,而不是在我可能插入需要在测试中加载资源的 DOM 元素之后重新声明测试。

4

1 回答 1

1

首先,Modernizr.addTest()在您的情况下并不是必需的(它会锁定并可能导致不良行为)。你可以简单地做:

Modernizr.load({
    test: $('section #myid').length > 0,
    ...
});

尽管您可能完全可以跳过它,这取决于您监控 DOM 的方式。Livequery对此有好处:

$('section #myid').livequery(function () {
    // This will run whenever a new element matches the selector: either now
    // (if the element already exists), or when it's inserted into the DOM later
    Modernizr.load({
        // no test needed - just use it as an async loader
        load: ['custom1.js', 'custom2.js'],
        complete: function () {
            // do stuff
        }
    });

    // Presumably you only want the above to run once, so remove the Livequery
    // handler now (`arguments.callee` is the current function, i.e. the event
    // handler)
    $('section #myid').expire(arguments.callee);
});
于 2013-03-19T18:53:01.703 回答