首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • js验证问题,有点难度 [已结贴,结贴人:benbenkui]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • benbenkui
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 揭贴率:
    发表于:2008-08-20 17:37:43 楼主

    页面加载的数据如上图,现在修改或者添加新的数据.
    修改是指在原文本框内修改,
    添加是在新行里填写数据(添加新行的时候页面无刷新,js脚本直接添加,可以添加任意多行),如下图

    如果新的数据不在元数据的区间内,则提示.元数据始终是指页面加载的初始数据.
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • benbenkui
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 17:41:281楼 得分:0
    本地的图片怎么插上去啊,郁闷
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • suyiming
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 17:42:332楼 得分:10
    看不到图片
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • benbenkui
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 17:50:003楼 得分:0
    删除  起 号      止 号      张 数
    删除  01        111        111
    删除  112        200        89
    删除  600        700        101

    大概的效果就是这样的,不会粘图,只能这样了。
    大家看看,在线等。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • benbenkui
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 17:51:314楼 得分:0
    数据都是在一个table里的,添加新行的事件是在止号那一行敲回车.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • benbenkui
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 18:01:455楼 得分:0
    重新把问题说一下:
    删除  起 号    止 号      张 数
    删除  01        111        111
    删除  112        200        89
    删除  600        700        101

    这是页面加载的初始数据,现在需要修改这些数据。
    1.原值上修改(不添加新的一行)。
    2.添加新的行然后修改。
    注意:添加新的一行是没有刷新的(js直接添加),新行的数量没有限制。
    要求:修改的数据必须在元数据的区间内!
    分布够,可以再加,只求一个好的方案.


    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • YiCaoYiMu08
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 18:09:396楼 得分:10
    var testTb=document.getElementById("testTbl");

    添加行
    var newTr = testTb.insertRow();

    添加列
    var newTd0 = newTr.insertCell();
    var newTd1 = newTr.insertCell();

    设置列的内容
    newTd0.innerText = " <input type=text />";

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • benbenkui
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 18:14:307楼 得分:0
    我的问题是验证数据,不是如何添加新行。只是对输入的数据进行验证
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yagebu1983
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 18:22:298楼 得分:10
    验证控件!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • benbenkui
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 18:31:059楼 得分:0
    楼上的能说说什么验证控件能验证啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • benbenkui
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 18:34:3910楼 得分:0
    数据如图
    删除  起 号    止 号      张 数
    删除  01        111        111
    删除  112        200        89
    删除  600        700        101

    这是页面加载的初始数据,现在需要修改这些数据。
    1.原值上修改(不添加新的一行)。
    2.添加新的行然后修改。
    注意:添加新的一行是没有刷新的(js直接添加),新行的数量没有限制。
    数据都是在table的
    要求:修改的数据必须在元数据的区间内!
    分不够,可以再加
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • YiCaoYiMu08
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 18:45:0511楼 得分:30
    <script language=javascript type=text/javascript>
            function Create()
            {
            var testTb=document.getElementById("testTbl");

                var newTr = testTb.insertRow();

                var newTd0 = newTr.insertCell();
                var newTd1 = newTr.insertCell();

                newTd0.innerHTML = " <input id='Text1' onblur=YanZheng1() type=text />";
               
                newTd1.innerHTML = " <input id='Text2' onblur=YanZheng2() type=text />";

            }
           
            function YanZheng1()
            {
            alert(document.getElementById("Text1").value);
            }
           
            function YanZheng2()
            {
            alert(document.getElementById("Text2").value);
            }
        </script>
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • benbenkui
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 18:52:0612楼 得分:0
    删除  起 号    止 号      张 数
    删除  01        111        111
    删除  112        200        89
    删除  600        700        101
    我还是解释的明白一点吧。
    如果我不想用01到100的数据,我直接修改为5到20,这样数据是对的,但是如果我输入05到201则不对,201不再区间内。
    在输入5到20后,我还想添加新的数据,在新行中输入的数据允许的区间应该是(1,5),(21,111)
    如果还想添加新的数据,数据必须在余下的区间内
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • benbenkui
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 18:55:4213楼 得分:0
    就是新数据不能超出原有的区间
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • winflying36
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 20:05:4314楼 得分:30
    1.在绑定的时候将数据按照行号,启号+特殊符号+止 号的形式放在HASHTABLE中.
    2.修改的时候用AJAX到后台去对于行的数据比较,修改成功则修改该行值.
    3.添加的时候只有做个循环看看你的最大和最小数是否在每行对应的范围内.
    不知道对你有帮助不
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • benbenkui
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 09:38:4415楼 得分:0
    页面加载的时候已经将数据从库里读出,当前的验证只能从当前页面的初始数据验证。
    无需再次连库,只是需要在新数据提交之前做出数据的合法验证(是否存在于区间内)。
    我的初步做法是(在前台),用一二维数组将初始的数据存起来,在当前行修改数据时
    能够正确的判断,但是在添加新行的时候,也就是改变了当前的区间,感觉判断很难。

    贴出我的一点代码:
    JScript code
    var arr=new Array(); var arrSum;//获得库存数量 var count;//获得当前行数 var flag=true;//判断是否添加新行 //获取初始化数据 window.onload=function() { var m_Table=document.getElementById('<%= GridView1.ClientID %>'); var m_Row=m_Table.rows; count=m_Row.length; for(var i=1;i<count-1;i++) { if(m_Row[i].cells.length==5) { arr[i]=new Array(3); arr[i][0]=m_Row[i].cells[2].childNodes[0].value; arr[i][1]=m_Row[i].cells[3].childNodes[0].value; arr[i][2]=m_Row[i].cells[4].childNodes[0].value; arrSum=(m_Row[count-1].cells[4].childNodes[0].value); } } if('<%= LeiBie %>'=='FGSTuiPiaoDan'||'<%= LeiBie %>'=='XSZTuiPiaoDan') { xuhaoDisplay();//当类别是分公司和收费站退票单时,序号不显示 } } //起号,止号检查是否出界 function Check() { //获得当前行 var m_Row = event.srcElement.parentNode.parentNode; //当前行的起号 var m_v2=Number(m_Row.cells[2].childNodes[0].value); //当前行的止号 var m_v3=Number(m_Row.cells[3].childNodes[0].value); //当前行的数量 var m_v4=Number(m_Row.cells[4].childNodes[0].value); //是否回车添加新行 if(flag) { //检查起号是否越界 if(m_v2<Number(arr[m_Row.rowIndex][0])||m_v2>Number(arr[m_Row.rowIndex][1])) { m_Row.cells[2].childNodes[0].value=arr[m_Row.rowIndex][0]; alert('起号超界'); event.returnValue = false; return; } //检查止号是否超界 if(m_v3<Number(arr[m_Row.rowIndex][0])||m_v3>Number(arr[m_Row.rowIndex][1])) { m_Row.cells[3].childNodes[0].value=arr[m_Row.rowIndex][1]; alert('止号超界'); event.returnValue = false; return; } //统计当前行的数量 subCurrent(); SumZhangShu(); } } //检查总的库存数是否超界 function CheckSum() { var m_Table=document.getElementById('<%= GridView1.ClientID %>'); var m_Rows=m_Table.rows; var count=m_Rows.length; var sum=Number(m_Rows[count-1].cells[4].childNodes[0].value); if(sum>arrSum) { alert('退票总数超界'); event.returnvalue=false; } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • benbenkui
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 09:45:4016楼 得分:0
    是不是这个问题,更适合在web开发的javasript提问啊?
    这个项目用的js太多,刚学的,以前更是一点也不会脚本.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • anncesky
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 09:57:3517楼 得分:0
    没懂你说的

    不过只要添加前知道你说的那个“区间”

    随便怎么都可以CHECK了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • benbenkui
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 10:02:1618楼 得分:0
    因为表达的问题导致明白我意思的人太少,无法贴图很郁闷....
    神啊,来帮我看看吧。可以想成一个纯数学的问题.

    区间(a,b),(c,d)
    添加一个新区间(e,f),前提:(e,f)在(a,b),(c,d)内
    再添加一个区间(m,n),前提:(m,n)在(a,b),(c,d)内,并且(m,n)和(e,f)不相交
    在添加一个区间(g,k):前提:(g,k)在(a,b),(c,d)内,并且(g,k),(m,n),(e,f)不相交
    ......
    如此类推
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • anncesky
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 10:22:0019楼 得分:10


    1.
    要让添加一个区间一定在(a,b),(c,d)内不难吧

    a <b c <d这是预设

    只要让 (m>a and n <b)or(m>c and n <b)就可以了

    2.
    并且(g,k)和(m,n),(e,f)不相交

    其实一样
        (g <m and k>n and g <e and k>f)

    你上面不是一行代表一个区间吗
    直接for(row in rows)循环

     
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wuxiaoqqqq
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 10:26:4720楼 得分:0
    你把值取到,就是一个数学问题了啊。
    总的范围你是知道的。
    我觉得你上面的描述是错的.
    应该是这样,有一个区间(a,b)
    你可以把a和b的值先存起来,这是一个总的区间,然后每次插入新值的时候先把已有的值找出来。
    不需要找a,b。
    然后就循环判断是否有交集就行了.
    判断交集笨方法还是很简单的,如果新区间的大数比其它区间的小数都要小,就只要判断小数是否大于a.
    如果小数比其它都要大,就只要判断大数是否小于b.
    如果大数比一部小,比一部分大,你就只要判断小数是否比那部分小的区间的大数大就行了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • benbenkui
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 10:27:2221楼 得分:0
    对就是一行代表一个区间
    for(row in rows)循环,强
    我去试试,谢谢了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wuxiaoqqqq
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 10:29:5022楼 得分:0
    19的相交有点错误吧。
    应该这样判断
    k>m and k <e 就只要判断g>n就行了.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • winflying36
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 10:34:1523楼 得分:0
    1.其实就是将你取出来的数据按照 行-开始-结束 存放在Session里面
    2.修改的时候直接找对应行,修改成功后,修改Session里该行数据的开始和结束
    3.添加的时候去循环Session里面的如果你的数在这些区间中就失败,成功讲新的数据写入Session
    4.最后再将数据提交处理

    至于Session使用什么类型存放数据,或者你在js里面存放数据这个都以方便你可以查找对应行数据为前提

    这样说明可以吗?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • benbenkui
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 10:43:1724楼 得分:0
    谢谢楼上的,我好好理解一下二位的思路
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • benbenkui
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 11:13:3725楼 得分:0

    三个区间X(A,B),Y(C,D),Z(E,F)

    b>a(基本条件)
    1.添加数据:(a1,b1) 满足条件:
    如果(a1>A&&b1 <B),X=true;else false;
    如果(a1>C&&b1 <D),Y=true;else false;
    如果(a1>E&&b1 <F),Z=true;else false;
    2.添加数据:(a2,b2)满足条件
    如果X==true;(b1 <a2 <B && b2 <B)||(A <b2 <a1 && a1>A)
    如果Y==true;(b1 <a2 <D && b2 <D)||(C <b2 <a1 && a1>c)
    如果Z===true;......
    3.添加数据:(a3,b3)满足条件
    ........
    这样判断思路会有问题吗?如果没问题,我就可以这样写下去了.
    修改 删除 举报 引用 回复