有几行几列的一个checkbox
比如这样 1 2 3
4 5 6
7 8 9
10 11 12
的checkbox
我选 1245 算是矩形 选1379 不算矩形(因为没有铺满里面) 选123456789才算矩形
没成矩形弹出框就行。
求这样的一个算法。。
有思路不会代码了、
从选择的几个点中找出最边的俩个点
然后把这俩个点作为一个矩形先算出里面有几个格子。
最后找出点击的checkbox有多少个。来匹配?
不知道我是否想错了。
求教育。
而且checkbox的value被占用了。行和列只能放id上了。。
<table style='width:100%;'>
<%
int index = 0;
for (int i = 0; i < 10; i++) {
%>
<tr>
<% for (int j = 0; j < 10; j++) {
int blockIndex = index++;
%>
<td>
<div style='width:100%;height: 100%;border:1px dashed black;' align="center">
位置<%=blockIndex+ 1%>
<input type="checkbox" name='subBlockIndex' value="<%=blockIndex%>"
id='<%=i%><%=j%>'/>
</div>
</td>
<% } %>
</tr>
<% } %>
</table>
hidden var e=document.getElementsByTagName("input");
var arr = new Array();
var hasNoneChecked = true;
var num = 0;
for(var i=0; i<e.length; i++){
if(e[i].type=='checkbox'&&e[i].checked&&e[i].name!="checkboxAllName"){
arr.push(e[i].id);
}
if(hasNoneChecked){
return alert("请选择一个位置");
}else{
//判断是否是矩形 TODO 还没判断好。
// x
// x x x
// x x
//类似这样图形不行。
arr.sort();
//alert(arr);
min = arr[0];
//alert(arr[0].charAt("_"));
minx = arr[0].substring(0,arr[0].indexOf("_")); //minx
miny = arr[0].substring(arr[0].indexOf("_")+1,arr[0].length);//miny
max = arr[arr.length-1];
maxx = arr[arr.length-1].substring(0,arr[arr.length-1].indexOf("_"));
maxy = arr[arr.length-1].substring(arr[arr.length-1].indexOf("_")+1,arr[arr.length-1].length);
//alert("minx="+minx);
//alert("miny="+miny);
//alert("maxx="+maxx);
//alert("maxy="+maxy);
if(minx == maxx){
//alert("横排");
tmpy = maxy-miny;
if(tmpy+1 == arr.length){
formObject.submit();
}else{
return alert("请围成一个矩形");
}
}else{
tmpx = maxx-minx;
//alert(tmpx);
tmpy = maxy-miny;
//alert(tmpy);
temp = (tmpx+1)*(tmpy+1);
//alert(temp);
if(arr.length == temp){
formObject.submit();
}else {
return alert("请围成一个矩形");
} } }