今天写一个抽奖程序,想用jsp实现,想一下抽出10名中奖名单来。JavaScript来运行滚动名单,10个名单框一起滚动变换数据。要求中奖名单不重复,就在JavaScript写了个校验方法。结果出现系统提示:"该页面上的脚本造成Internet Explorer运行速度减慢。如果继续运行,您的计算机将要变慢。是否取消该脚本"。 觉得我写的东西有问题,贴出来大家给找找问题。
code:<%@ page language="java"
session="true"
isThreadSafe="true"
contentType="text/html; charset=GBK"
%>
<%@ page import="java.util.*"%>
<%@ page import="com.servic.db.query.*"%>
<%
response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
response.setHeader("Pragma","no-cache"); //HTTP 1.0
response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
GetPriseSet gp = new GetPriseSet();
String result = request.getParameter("result");
String luckyname = null;
if(result!=null && !result.equals("")){
luckyname = result;
}
if(str==null || str.length()<1){
str = gp.getPirseName();
}
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<link rel="stylesheet" href="TK.CSS">
</head>
<script language="javascript">
var alldata = '<%=str%>' //抽奖的姓名,以,为分隔
var alldataarr = alldata.split(",") //中奖名单数据数组,用来在页面上滚动显示。大约有2千条数据
var num = alldataarr.length-1
var a = new Array(10);
var timer
var t
var go=false;
function change(){
a=getArray(0,num);
<%
for(int i=0;i<10;i++){
%>
document.getElementById("oknum_<%=i%>").value = alldataarr[a[<%=i%>]];
<%}%>
}
function start(){
clearInterval(timer);
timer = setInterval('change()',500); //500(毫秒)为变换间隔,越小变换的越快
}
function ok(){
clearInterval(timer);
go = true;
}
function submit(){
if(go){
document.form1.submit();
}else{
alert("请先点击停止 选出中奖名单");
}
} function getArray(min,max){
var i=0;
var b =false;
var temp;
while(i<10){
temp=GetRnd(min,max);
for (var j=0;j<a.length ;j++ )
{
if(a[j]==temp){
b=true;
break;
}
}
if(!b){
a[i]=temp;
i++;
}
}
return a;
}
function getArraySS(min,max){
for (var j=0;j<a.length ;j++ )
{
a[j]=GetRnd(min,max);
}
return a;
}
function GetRnd(min,max){
t= parseInt(Math.random()*(max-min+1));
return t;
}
</script> <body bgcolor="#FFFFFF" leftmargin="0" topmargin="0">
<table width="777" border="0" cellspacing="0" cellpadding="0" height="70" align="center"></table>
<table width="777" border="0" cellspacing="0" cellpadding="0" height="28" bgcolor="67985D" align="center"><%for(int i=0;i<10;i++){ %>
<tr>
<td>中奖姓名:<input type="text" id="oknum_<%=i%>" name="oknum_<%=i%>" value=""> </td>
</tr><%} %><tr>
<td><button onclick="start()" accesskey="s">开始(<U>S</U>)</button> </td>
<td><button onclick="ok()" accesskey="o">停止(<U>O</U>)</button> </td>
</tr>
<tr>
<td>
<button onclick="submit()" accesskey="o">中奖确认(<U>Q</U>)</button>
</td>
</tr>
<%if(luckyname!=null) {%>
<tr>
<td>
中奖名单是:<%=luckyname %>
</td>
</tr>
<%} %>
</table>
</td></table><br>
</body>
</html>
code:<%@ page language="java"
session="true"
isThreadSafe="true"
contentType="text/html; charset=GBK"
%>
<%@ page import="java.util.*"%>
<%@ page import="com.servic.db.query.*"%>
<%
response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
response.setHeader("Pragma","no-cache"); //HTTP 1.0
response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
GetPriseSet gp = new GetPriseSet();
String result = request.getParameter("result");
String luckyname = null;
if(result!=null && !result.equals("")){
luckyname = result;
}
if(str==null || str.length()<1){
str = gp.getPirseName();
}
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<link rel="stylesheet" href="TK.CSS">
</head>
<script language="javascript">
var alldata = '<%=str%>' //抽奖的姓名,以,为分隔
var alldataarr = alldata.split(",") //中奖名单数据数组,用来在页面上滚动显示。大约有2千条数据
var num = alldataarr.length-1
var a = new Array(10);
var timer
var t
var go=false;
function change(){
a=getArray(0,num);
<%
for(int i=0;i<10;i++){
%>
document.getElementById("oknum_<%=i%>").value = alldataarr[a[<%=i%>]];
<%}%>
}
function start(){
clearInterval(timer);
timer = setInterval('change()',500); //500(毫秒)为变换间隔,越小变换的越快
}
function ok(){
clearInterval(timer);
go = true;
}
function submit(){
if(go){
document.form1.submit();
}else{
alert("请先点击停止 选出中奖名单");
}
} function getArray(min,max){
var i=0;
var b =false;
var temp;
while(i<10){
temp=GetRnd(min,max);
for (var j=0;j<a.length ;j++ )
{
if(a[j]==temp){
b=true;
break;
}
}
if(!b){
a[i]=temp;
i++;
}
}
return a;
}
function getArraySS(min,max){
for (var j=0;j<a.length ;j++ )
{
a[j]=GetRnd(min,max);
}
return a;
}
function GetRnd(min,max){
t= parseInt(Math.random()*(max-min+1));
return t;
}
</script> <body bgcolor="#FFFFFF" leftmargin="0" topmargin="0">
<table width="777" border="0" cellspacing="0" cellpadding="0" height="70" align="center"></table>
<table width="777" border="0" cellspacing="0" cellpadding="0" height="28" bgcolor="67985D" align="center"><%for(int i=0;i<10;i++){ %>
<tr>
<td>中奖姓名:<input type="text" id="oknum_<%=i%>" name="oknum_<%=i%>" value=""> </td>
</tr><%} %><tr>
<td><button onclick="start()" accesskey="s">开始(<U>S</U>)</button> </td>
<td><button onclick="ok()" accesskey="o">停止(<U>O</U>)</button> </td>
</tr>
<tr>
<td>
<button onclick="submit()" accesskey="o">中奖确认(<U>Q</U>)</button>
</td>
</tr>
<%if(luckyname!=null) {%>
<tr>
<td>
中奖名单是:<%=luckyname %>
</td>
</tr>
<%} %>
</table>
</td></table><br>
</body>
</html>
所以一旦判断到有过重复
那么 if(!b){
a[i]=temp;
i++;
}
再也不会执行了
也就永远出不了循环
var i=0;
var b =false;
var temp;
while(i<10){
temp=GetRnd(min,max);
for (var j=0;j<a.length ;j++ )
{
if(a[j]==temp){
b=true;
break;
}
}
if(!b){
a[i]=temp;
i++;
}
}
return a;
}请教三楼,红色部分,每次进入change()方法,调用getArray方法时候,都初始化b值,判断当有重复值的时候也重置b值了
当没有重复值的时候i++,退出while。
这是我写的逻辑, 你说的“b没有重置 ”是指什么? 能说的详细点么?最后把解决的办法写一下 谢谢
temp=GetRnd(min,max);
for (var j=0;j <a.length ;j++ )
{
//假设temp="a",a[0]="a",会使b为true并跳出For循环
if(a[j]==temp){
b=true;
break;
}
}
//如果b为true,那么i永远都是0
if(!b){
a[i]=temp;
i++;
}
}
function getArray(min,max){
var i=0;
var b =false;
var temp;
while(i<10){
b =false;
temp=GetRnd(min,max);
for (var j=0;j<a.length ;j++ )
{
if(a[j]==temp){
b=true;
continue;
}
}
if(!b){
a[i]=temp;
i++;
}
}
return a;
}每次进入while都会重新置b的值 把break改成continue,反正就10个长度 呵呵
var temp;
var i=0;
while(i <10){
var doFind =true;
while(doFind){){//执行查找,一直到找到不重复的为止
temp = getRand(min,max);//找一个随机的
var itemExist = false;
for (var j=0;j <a.length ;j++ ) //循环看这个随机数是否存在
{
if(a[j]==temp){
itemExist = true;
break;
}
}
if(!itemExist)//如果生成的随机数不重复就停止
doFind = false;
}
a[i]=temp;
}
return a;
}