做这个数独游戏的基本思路是: 1.表格用js渲染绘制,用一个字符串按添加顺序存储所有片段。 2.用数组对象存储数据,随机取数,清除旧数据。 3.用正则表达式圈定可能的重复范围组成数组 4.for循环遍历重复范围的数组,continue跳过空值,找到重复时立即结束返回。 5.开始,暂停事件的发生用"flag"标记。 重要代码 渲染9*9的表格 var tb_content = ""; var td_content = ""; for (var x = 1; x <= 9; x++) { tb_content += "" for (var y = 1; y <= 9; y++) { tb_content += ('<td><input autocomplete = "off" maxlength = "1" id = '+x+"-"+y+' style = "width:30px;height:30px;"></td>'); }; tb_content += ""; }; $("tbody").html(tb_content); 随机取得数据 $(".random").click(function(){ getData(); }); function getData() { $("td>input").val(""); $("td>input").removeClass("err"); clearTimeout(timeOutId); $("#clock>span").text("00"); chance = Math.floor(Math.random()*board.length); data = board[chance]; for (x in data) { $("#"+x).attr("value",data[x]).prop("readonly","readonly"); } }; getData(); 正则表达式效验 $("td>input:not([readonly])").keyup(function(ev){ if(!$(that).val()) { $(that).removeClass("err"); } var x = $(this).attr("id").substr(0,1);//取得target的x,y var y = $(this).attr("id").substr(2,3); // var text = $(this).val();//target var that = this; var Arr = []; var bool; $("td>input").each(function(el,i,arr){//遍历每个 var test_id = $(this).attr("id"); var patten1 =new RegExp("^"+x+".[^"+y+"]$"); var patten2 = new RegExp("^[^"+x+"]."+y+"$"); // var patten1 = new RegExp("(^"+x+")"||"("+y+"$)"); var patten3 = gong(x,y); var bool = patten1.test(test_id) || patten2.test(test_id) || patten3.test(test_id); if(bool) { Arr.push(test_id); } }); // console.log(Arr); //遍历每个范围数组,当target值与其相等,则报错 $(".detail").click(function(){ alert("1"); // // $(this).addClass("detailopen"); // $(".article").toggle(); }); for (var i = 0; i < Arr.length; i++) { var target_val = $(that).val(); var test_val = $("#"+Arr[i]).not(that).val();//除去自身; if (!test_val) { continue;//只能在循环体内使用 }; if (test_val == target_val) { $(that).addClass("err"); return;//找到时立马返回 }else{ $(that).removeClass("err"); } }; };