2012-08-28 1 views
1

나는 자바 스크립트를 사용하여 따옴표 목록을 무작위로 표시하는 웹 사이트를 운영하고 있습니다. 저는이 같은 스크립트를 문제없이 7-8 개의 다른 사이트에서 사용했지만,이 현재 사이트에서는 몇 초 후에 브라우저가 손상됩니다.견적 리볼버 충돌 웹 사이트

따옴표가없는 페이지에서 자바 스크립트가 호출되어 비슷한 문제가 발생했지만 자바 스크립트를 따옴표로 '포함'파일로 이동하면이 문제를 해결할 수 있습니다.

사이트는 다른 서버와 동일한 서버 공간에 있으며 파일이 정확히 동일하므로이 사이트에 문제가있는 이유와 다른 사이트가 아닌 이유를 해결할 수 없습니다. .. 여기

는 ... 스크립트입니다

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

미리 감사드립니다!

답변

1

. temp이 이전 값으로 설정되어 있기 때문에, 여기에 무한 루프를 얻을 : 당신이 그것을 포장하는 경우 다음과 같은 안전 확인

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

, 그것을 작동합니다. 예를 여기를 참조하십시오 (메신저 5000 밀리 초 후에 추측)

var ran = getRan(); 
if (length > 1) { 
    while (ran == temp) { 
     ran = getRan(); 
    } 
} 
+0

완벽한! 감사! –

2

내가 알아 차린 첫 번째 사실은 스크립트가 전혀 캡슐화되지 않았다는 것입니다. 코드에서 "this"는 윈도우 객체를 의미합니다. show와 getRan 함수는 모두 window (전역) 객체의 멤버입니다.

당신은 완전히 변수를 캡슐화하는이 버전을 시도 할 수 있습니다 : 당신은 getRan() 항상 같은 값 (1)을 반환 위하여려고하고 있다는 것을 의미 하나 견적을 가지고

$(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); 
}); 
+0

그게 확실히 조금 그것을 청소 있지만 페이지가 여전히 몇 초 후에 정지 : http://perch.roscoedm.co.uk/aboutus .php 실제 예 : http://perch2.monaghans.co.uk/aboutus.php –

+1

작동하려면 하나 이상의 견적 (li)이 필요합니다. –