2

我在 php 页面的正文中有以下内容:

<?php if($foo) : ?>

    <script>
        js_func();
    </script>

<?php else: ?>

    //Do Something else

<?php endif; ?>

基于 PHP 条件,我想或不想运行 js_func()。

但是,如果我在页面底部加载所有脚本(包括定义 js_func() 的脚本),这将导致错误。

一种可能的解决方案是在调用 js_func() 之前加载外部脚本,但我知道出于性能原因我不应该这样做。

我可以使用 $(document).ready(function() {}); 但这只是移动错误,因为 jQuery 也加载到页脚中。

我能想到的唯一其他选择是使用 window.onload 或从不内联调用 js 函数。其他人如何解决这个问题?

非常感谢。

编辑:

@Nile - 我不确定你的意思。为什么要注释掉我想要执行的代码?@haynar1658 - 我不想在 else 场景中执行 JS。@Matthew Blancarte - 明白了。这引出了我的问题,在实例化该函数之前确保加载我需要的 js 的最佳方法是什么?在它之前包含脚本?使用window.onload?等等

4

3 回答 3

0

只需将脚本移至顶部即可。

差异(如果有的话)非常小。
相信所有开发人员都不会“接受”在页面<script>s<head>放慢速度。

于 2012-09-11T00:51:09.330 回答
0

您是否尝试在 PHP 中回显它?

<?php if($foo) {
echo "<script> js_func(); </script>";
}else{
echo "something else";
}
于 2012-09-11T01:09:14.700 回答
0

我想你是在为自己的背部做一根棍子。根据您描述的问题,您希望将所有函数定义脚本块放在调用它们的位置之后。不可能!
如果您确实需要这样做,这有帮助吗?:

<script>    
    var fns = []; /* use fns to keep all the js code  
                     which call the functions defined after. */  
</script>


<script>
    //wrapp your code in a function and then push it into fns.   
    fns.push(function(){  
        js_func();  
    }) 
</script>


//script tags for loading your function  definition js script.  
<script src="path/to/jquery-any-version.js"></script>  
<script src="path/to/other-libraries.js"></script>


<script>
    //after your definition js scripts are loaded ,  call all functions in fns  
    for(var i=0, len=fns.length; i<len; i++){  
        var fn = fns[i];  
        fn.apply(this, []/* arguments that provided  as an array */);  
    }
</script>
于 2012-09-11T02:38:46.373 回答