2

使用他们的 Progressive Enhancement enhance.js库查看来自 Filament Group 的演示

修改为:-

<script type="text/javascript" src="../_shared/EnhanceJS/enhance.js"></script>
<script type="text/javascript"> 
// Run capabilities test
enhance({
loadScripts: [
 {src: 'js/excanvas.js', iecondition: 'all'},
 '../_shared/jquery.min.js',
 'js/visualize.jQuery.js',
 'js/example.js'
],
loadStyles: [
'css/visualize.css',
'css/visualize-dark.css'
] 
}); 

    alert($);

</script> 

我在警报中收到“$ is undefined error”,大概是因为 jQuery 尚未加载。

注意 - alert($) 仅用于调试 - 我正在尝试用它做一些事情,例如 $('some-selector') - 并且没有 $(handler) 或 $(document).ready 等也不起作用 - jquery 未加载,$ 未定义。

增强的onScriptLoaded看起来应该可以解决问题,但如果我添加

onScriptsLoaded:[runMyCode()]

然后

function runMyCode()
{
    alert("runMyCode was called");
    alert($);
}

第一个警报有效,但 $ 仍未定义。

如果我在按钮的单击事件上调用 runMyCode,它确实有效。

所以问题是 - 一旦所有脚本都完成了enhanced.js的加载,你如何运行代码?

PS 在 IE8/FF3/Chrome7 中验证了同样的问题

4

2 回答 2

3

我认为这可能是一个问题:

onScriptsLoaded:[runMyCode()]

你试过吗(假设数组表示法是正确的):(编辑——正确)

onScriptsLoaded: [runMyCode]

? 第一种方式,您在设置库时调用您的函数。您只想将引用传递给您的函数。

编辑实际上应该是:

onScriptsLoaded: runMyCode

我不知道数组来自哪里;“enhance.js”文档中绝对没有提到它。

于 2010-11-09T14:05:54.240 回答
3

我认为这就是你所追求的,注意它onScriptsLoaded直接用作回调,所以它应该是一个函数,而不是一个数组:

enhance({
   loadScripts: [
    {src: 'js/excanvas.js', iecondition: 'all'},
    '../_shared/jquery.min.js',
    'js/visualize.jQuery.js',
    'js/example.js'
   ],
   loadStyles: [
    'css/visualize.css',
    'css/visualize-dark.css'
   ],
   onScriptsLoaded: function() { alert($); }
});

或者更一般地,对于一个函数,只传递这样的引用:

   onScriptsLoaded: runMyCode

onScriptsLoaded:[runMyCode()]“种类”起作用的原因是它立即调用runMyCode函数(在此行运行时,而不是在脚本完成时)并根据该结果创建一个数组。当脚本完成时,这实际上会抛出一个错误,因为onScriptsLoaded它应该是一个回调函数,而不是一个数组。

于 2010-11-09T14:06:22.240 回答