2

PHPページの本文に次のものがあります。

<?php if($foo) : ?>

    <script>
        js_func();
    </script>

<?php else: ?>

    //Do Something else

<?php endif; ?>

PHP 条件に基づいて、js_func() を実行するか実行したくないかのどちらかです。

ただし、すべてのスクリプト (js_func() を定義するスクリプトを含む) をページの下部にロードすると、エラーが発生します。

考えられる解決策の 1 つは、js_func() を呼び出す前に外部スクリプトをロードすることですが、パフォーマンス上の理由からそうすべきではないことは理解しています。

$(document).ready(function() {}); を使用できます。ただし、jQueryもフッターにロードされるため、これはエラーを移動するだけです。

私が考えることができる他の唯一のオプションは、window.onload を使用するか、js 関数をインラインで呼び出さないことです。他の人はこの問題をどのように解決しますか?

どうもありがとう。

編集:

@ナイル-あなたが何を意味するのかわかりません。実行したいコードをコメントアウトするのはなぜですか? @ 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 に答える