1

javascriptを使用して引用符のリストをランダムに表示するWebサイトがあります。私はこの同じスクリプトを他の7〜8のサイトで問題なく使用しましたが、この現在のサイトでは、数秒後にブラウザがクラッシュするだけです。

引用符が付いていないページでJavaScriptが呼び出されたために同様の問題が発生しましたが、JavaScriptを引用符と同じ「includes」ファイルに移動することでこれを修正しました(つまり、JavaScriptがないと呼び出せません他の)

このサイトは他のサイトと同じサーバースペースにあり、ファイルはまったく同じであるため、このサイトに問題があり、他のサイトに問題がない理由を理解できません...

これがスクリプトです...

<ul id="quote">
<?php perch_content('Testimonials'); ?>
</ul>

<script type="text/javascript"> 

this.randomtip = function() {
    var pause = 5000; // define the pause for each tip (in milliseconds) Feel free to make the pause longer so users can have time to read the tips :)
    var length = $("#quote li").length;
    var temp = -1;
    this.getRan = function() {
        // get the random number
        var ran = Math.floor(Math.random() * length) + 1;
        return ran;
    };
    this.show = function() {
        var ran = getRan();
        // to avoid repeating tips we need to check 
        while (ran == temp) {
            ran = getRan();
        };
        temp = ran;
        $("#quote li").hide();
        $("#quote li:nth-child(" + ran + ")").fadeIn(500);
    };
    // initiate the script and also set an interval
    show();
    setInterval(show, pause);
};
$(document).ready(function() {
    randomtip();
});
</script> 

よろしくお願いします!

4

2 に答える 2

2

最初に気付いたのは、スクリプトがまったくカプセル化されていないことです。あなたのコードでは、「これ」はウィンドウ オブジェクトを意味します。show 関数と getRan 関数はどちらも window (グローバル) オブジェクトのメンバーです。

このバージョンを試して、変数を完全にカプセル化することができます:

$(document).ready(function () {
    var pause = 5000; // define the pause for each tip (in milliseconds)
    var length = $("#quote li").length;
    var temp = -1;
    var getRan = function() {
        // get the random number
        var ran = Math.floor(Math.random() * length) + 1;
        return ran;
    };
    var show = function() {
        var ran = getRan();
        // to avoid repeating tips we need to check 
        while (ran == temp) {
            ran = getRan();
        };
        temp = ran;
        $("#quote li").hide();
        $("#quote li:nth-child(" + ran + ")").fadeIn(500);
    };
    // initiate the script and also set an interval
    show();
    setInterval(show, pause);
});
于 2012-08-28T11:45:48.803 に答える
1

引用符は1つだけです。つまり、getRan()常に同じ値(1)が返されます。tempは前の値に設定されているため、ここで無限のループが発生します。

var ran = getRan();
while (ran == temp) {
    ran = getRan();
}

このように安全チェックで包むと、うまくいくはずです。

var ran = getRan();
if (length > 1) {
    while (ran == temp) {
        ran = getRan();
    }
}
于 2012-08-28T12:26:24.287 に答える