1

我有一个使用 javascript 随机显示报价列​​表的网站。我已经在 7-8 个其他站点上使用了相同的脚本,没有问题,但是在这个当前站点上,它只是在几秒钟后使浏览器崩溃。

我确实有一个类似的问题,这是由于在没有引号的页面上调用了 javascript,但是我通过将 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

我注意到的第一件事是您的脚本根本没有封装。在您的代码中,“this”表示窗口对象。show 和 getRan 函数都是窗口(全局)对象的成员。

你可以试试这个版本来完全封装你的变量:

$(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

你只有一个引号,这意味着它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 回答