<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>JK:支持民族工业,尽量少买X货</title>
<style>
div{
display:inline;
width:100px;
border:solid 1px;
}
</style>
<script language="JavaScript">
<!--function getRandomArray(m,n)   //得到m张牌里的n张牌 (m>=n>0)
{
if(n==null || n==m )
return getRandomPlayCard(m);
var array1=new Array(m);
for(var i=0;i<m;i++)
array1[i]=i;
var m2=m-0.00001;
for(var i=0;i<n;i++)
{
var rnd=Math.floor(Math.random()*m2);
var swap=array1[i];array1[i]=array1[rnd];array1[rnd]=swap;
}
return(array1.slice(0,n));
}
function getRandomPlayCard(m) //洗牌
{
var array1=new Array(m);
for(var i=0;i<m;i++){
var rnd=Math.floor(Math.random()*(i+0.99999))
array1[i]=array1[rnd];
array1[rnd]=i;
}
return array1;
}
--> 
</script><script language="JavaScript">
<!--
var currentStartButton=null;
var isRuning=false;
function startFun(obj)   
{
if (isRuning){
alert("抽奖正在进行中");
return;
}
else if (currentStartButton!=null){
alert("请先处理(确认或取消)上次抽奖结果");
return;
}
else{
currentStartButton=obj;
var luckNum=currentStartButton.parentNode.getElementsByTagName("select")[0].value;
var sourceNum=document.getElementById("sourceContainer").getElementsByTagName("div").length;

if(luckNum>sourceNum){
alert("请调小一次性抽奖个数");
currentStartButton=null;
return;
}
isRuning=true;
document.getElementById("stopButton").disabled=false;
document.getElementById("stopButton").focus(); document.getElementById("confirmButton").disabled=true;
document.getElementById("cancelButton").disabled=true;
}
}function stopFun(){
isRuning=false;
document.getElementById("stopButton").disabled=true;
document.getElementById("confirmButton").disabled=false;
document.getElementById("cancelButton").disabled=false;
}function cancelFun(){
currentStartButton=null;
document.getElementById("confirmButton").disabled=true;
document.getElementById("cancelButton").disabled=true;
var luckContainerObj=document.getElementById("luckContainer");
luckContainerObj.innerHTML="";
}function confirmFun(){
var currentResultContainer=currentStartButton.parentNode.parentNode.nextSibling.children[0];
var sourceItems=document.getElementById("sourceContainer").getElementsByTagName("div");
var luckContainerObj=document.getElementById("luckContainer");
var checkboxObjs=luckContainerObj.getElementsByTagName("input");
var realLuckItems=new Array();
for(var i=0;i<checkboxObjs.length;i++){
if(checkboxObjs[i].checked) realLuckItems[realLuckItems.length]=sourceItems[checkboxObjs[i].value];
}
for(var i=0;i<realLuckItems.length;i++){
currentResultContainer.appendChild(realLuckItems[i]);
}
luckContainerObj.innerHTML="";
currentStartButton=null;
document.getElementById("confirmButton").disabled=true;
document.getElementById("cancelButton").disabled=true;}
function getLuckFun(){
if(!isRuning || currentStartButton==null ) return;
var luckNum=currentStartButton.parentNode.getElementsByTagName("select")[0].value;
var sourceItems=document.getElementById("sourceContainer").getElementsByTagName("div");
var sourceNum=sourceItems.length;
var luckContainerObj=document.getElementById("luckContainer");
luckContainerObj.innerHTML="";
var luckArray=getRandomArray(sourceNum,luckNum);
for(var i=0;i<luckArray.length;i++){
var tempItem=sourceItems[luckArray[i]].cloneNode(true);
var tempCheckbox=document.createElement("<input type=checkbox value="+luckArray[i]+" checked>");
tempItem.insertAdjacentElement("afterBegin",tempCheckbox);
luckContainerObj.appendChild(tempItem);
}}window.setInterval(getLuckFun,50);--> 
</script>
</head><body  >  <table border="1" width="100%" style="display:inline;">
    <tr>
      <td >幸运榜 
      <input type=button value="停止" onclick="stopFun();" id="stopButton" disabled >  
      <input type=button value="确认中奖" onclick="confirmFun();" id="confirmButton" disabled > 
      <input type=button value="取消中奖" onclick="cancelFun();"  id="cancelButton" disabled >
      </td>
    </tr>
    <tr>
      <td id=luckContainer ></td>
    </tr>
    <tr>
      <td >三等奖 <input type=button value="抽奖" onclick="startFun(this)">
       <select name=num ><script>for(var i=1;i<101;i++) document.write("<option value="+i+">"+i+"")</script></select>
       位</td>
    </tr>
    <tr>
      <td ></td>
    </tr>
    <tr>
      <td >二等奖 <input type=button value="抽奖" onclick="startFun(this)">
       <select name=num ><script>for(var i=1;i<101;i++) document.write("<option value="+i+">"+i+"")</script></select>
       位</td>
    </tr>
    <tr>
      <td ></td>
    </tr>
    <tr>
      <td >一等奖 <input type=button value="抽奖" onclick="startFun(this)">
       <select name=num ><script>for(var i=1;i<101;i++) document.write("<option value="+i+">"+i+"")</script></select>
       位</td>
    </tr>
    <tr>
      <td ></td>
    </tr>
    <tr>
      <td >特等奖 <input type=button value="抽奖" onclick="startFun(this)">
       <select name=num ><script>for(var i=1;i<101;i++) document.write("<option value="+i+">"+i+"")</script></select>
       位</td>
    </tr>
    <tr>
      <td ></td>
    </tr>
    <tr>
      <td >待中奖人士</td>
    </tr>
    <tr>
      <td id=sourceContainer >
       <div >张三(001)</div>
       <div >李四(002)</div>
       <div >王五(003)</div>
       <div >004</div>
       <div >005</div>
       <script>for(var i=6;i<50;i++)document.write("<div>"+i+"</div>")</script>
      </td>
    </tr>
  </table></body>

解决方案 »

  1.   

    抽奖机应该考虑的问题有:
    1。中奖人不在场,相当于自动弃奖,但中奖机会还应留给其它人
    2。有人认为奖太低,应该可以让他弃当前奖,但保留剩下奖项的中奖机会
    3。中奖机会应该是平均分布的,例如用Math.round(Math.random()*9)来抽1到十,会产生1和10的中奖机会是1/18,而其它的中奖机会却都是1/9
    4。抽奖的是老大,并且是在公众场合,所以出现bug或没考虑到的情形的话,会影响形象,慎之
      

  2.   

    以上代码,考虑少了一种情况:
    点抽奖后,又把抽奖个数调得太大。更正后的代码如下:<html><head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>JK:支持民族工业,尽量少买X货</title>
    <style>
    div{
    display:inline;
    width:100px;
    border:solid 1px;
    }
    </style>
    <script language="JavaScript">
    <!--function getRandomArray(m,n)   //得到m张牌里的n张牌 (m>=n>0)
    {
    if(n==null || n==m )
    return getRandomPlayCard(m);
    var array1=new Array(m);
    for(var i=0;i<m;i++)
    array1[i]=i;
    var m2=m-0.00001;
    for(var i=0;i<n;i++)
    {
    var rnd=Math.floor(Math.random()*m2);
    var swap=array1[i];array1[i]=array1[rnd];array1[rnd]=swap;
    }
    return(array1.slice(0,n));
    }
    function getRandomPlayCard(m) //洗牌
    {
    var array1=new Array(m);
    for(var i=0;i<m;i++){
    var rnd=Math.floor(Math.random()*(i+0.99999))
    array1[i]=array1[rnd];
    array1[rnd]=i;
    }
    return array1;
    }
    --> 
    </script><script language="JavaScript">
    <!--
    var currentStartButton=null;
    var isRuning=false;
    function startFun(obj)   
    {
    if (isRuning){
    alert("抽奖正在进行中");
    return;
    }
    else if (currentStartButton!=null){
    alert("请先处理(确认或取消)上次抽奖结果");
    return;
    }
    else{
    currentStartButton=obj;
    var luckNum=currentStartButton.parentNode.getElementsByTagName("select")[0].value;
    var sourceNum=document.getElementById("sourceContainer").getElementsByTagName("div").length;

    if(luckNum>sourceNum){
    alert("请调小一次性抽奖个数");
    currentStartButton=null;
    return;
    }
    isRuning=true;
    document.getElementById("stopButton").disabled=false;
    document.getElementById("stopButton").focus(); document.getElementById("confirmButton").disabled=true;
    document.getElementById("cancelButton").disabled=true;
    }
    }function stopFun(){
    isRuning=false;
    document.getElementById("stopButton").disabled=true;
    document.getElementById("confirmButton").disabled=false;
    document.getElementById("cancelButton").disabled=false;
    }function cancelFun(){
    currentStartButton=null;
    document.getElementById("confirmButton").disabled=true;
    document.getElementById("cancelButton").disabled=true;
    var luckContainerObj=document.getElementById("luckContainer");
    luckContainerObj.innerHTML="";
    }function confirmFun(){
    var currentResultContainer=currentStartButton.parentNode.parentNode.nextSibling.children[0];
    var sourceItems=document.getElementById("sourceContainer").getElementsByTagName("div");
    var luckContainerObj=document.getElementById("luckContainer");
    var checkboxObjs=luckContainerObj.getElementsByTagName("input");
    var realLuckItems=new Array();
    for(var i=0;i<checkboxObjs.length;i++){
    if(checkboxObjs[i].checked) realLuckItems[realLuckItems.length]=sourceItems[checkboxObjs[i].value];
    }
    for(var i=0;i<realLuckItems.length;i++){
    currentResultContainer.appendChild(realLuckItems[i]);
    }
    luckContainerObj.innerHTML="";
    currentStartButton=null;
    document.getElementById("confirmButton").disabled=true;
    document.getElementById("cancelButton").disabled=true;}
    function getLuckFun(){
    if(!isRuning || currentStartButton==null ) return;
    var luckNum=currentStartButton.parentNode.getElementsByTagName("select")[0].value;
    var sourceItems=document.getElementById("sourceContainer").getElementsByTagName("div");
    var sourceNum=sourceItems.length;
    var luckContainerObj=document.getElementById("luckContainer");
    luckContainerObj.innerHTML="";
    if(luckNum>sourceNum){
    alert("请调小一次性抽奖个数");
    stopFun();
    cancelFun();
    return;
    }
    var luckArray=getRandomArray(sourceNum,luckNum);
    for(var i=0;i<luckArray.length;i++){
    var tempItem=sourceItems[luckArray[i]].cloneNode(true);
    var tempCheckbox=document.createElement("<input type=checkbox value="+luckArray[i]+" checked>");
    tempItem.insertAdjacentElement("afterBegin",tempCheckbox);
    luckContainerObj.appendChild(tempItem);
    }}window.setInterval(getLuckFun,50);--> 
    </script>
    </head><body  >  <table border="1" width="100%" style="display:inline;">
        <tr>
          <td >幸运榜 
          <input type=button value="停止" onclick="stopFun();" id="stopButton" disabled >  
          <input type=button value="确认中奖" onclick="confirmFun();" id="confirmButton" disabled > 
          <input type=button value="取消中奖" onclick="cancelFun();"  id="cancelButton" disabled >
          </td>
        </tr>
        <tr>
          <td id=luckContainer ></td>
        </tr>
        <tr>
          <td >三等奖 <input type=button value="抽奖" onclick="startFun(this)">
           <select name=num ><script>for(var i=1;i<101;i++) document.write("<option value="+i+">"+i+"")</script></select>
           位</td>
        </tr>
        <tr>
          <td ></td>
        </tr>
        <tr>
          <td >二等奖 <input type=button value="抽奖" onclick="startFun(this)">
           <select name=num ><script>for(var i=1;i<101;i++) document.write("<option value="+i+">"+i+"")</script></select>
           位</td>
        </tr>
        <tr>
          <td ></td>
        </tr>
        <tr>
          <td >一等奖 <input type=button value="抽奖" onclick="startFun(this)">
           <select name=num ><script>for(var i=1;i<101;i++) document.write("<option value="+i+">"+i+"")</script></select>
           位</td>
        </tr>
        <tr>
          <td ></td>
        </tr>
        <tr>
          <td >特等奖 <input type=button value="抽奖" onclick="startFun(this)">
           <select name=num ><script>for(var i=1;i<101;i++) document.write("<option value="+i+">"+i+"")</script></select>
           位</td>
        </tr>
        <tr>
          <td ></td>
        </tr>
        <tr>
          <td >待中奖人士</td>
        </tr>
        <tr>
          <td id=sourceContainer >
           <div >张三(001)</div>
           <div >李四(002)</div>
           <div >王五(003)</div>
           <div >004</div>
           <div >005</div>
           <script>for(var i=6;i<50;i++)document.write("<div>"+i+"</div>")</script>
          </td>
        </tr>
      </table></body>