obj.defaultValue==obj.value遍历每个表单

解决方案 »

  1.   

    /**
    * This function is to check if a form (or a container of implements) has been changed.
    * JK 2004-01-05
    * formObj:the checked form
    * exceptObjName:the name of whitch need not be checked;
    * For example:isFormChangedFun(document.frm,"ACheckbox,BRadio,CSelect");
    */
    function isFormChanged(formObj,exceptObjName)
    {
    if(formObj==null) formObj=document.forms[0];
    if(exceptObjName==null) exceptObjName=="";
    var selectObjs=formObj.getElementsByTagName("SELECT");//For Select Obj
    for(var i=0;i<selectObjs.length;i++)
    {
    if((selectObjs[i].name=="")||(eval("/(^|,)"+selectObjs[i].name+"(,|$)/g").test(exceptObjName))) continue;
    for(var j=1;j<selectObjs[i].length;j++)
    {
    if(selectObjs[i].options[j].defaultSelected!=selectObjs[i].options[j].selected)
    return true;
    }
    }

    var inputObjs=formObj.getElementsByTagName("INPUT");//For Input Obj
    for(var i=0;i<inputObjs.length;i++)
    {
    if((inputObjs[i].name=="")||(eval("/(^|,)"+inputObjs[i].name+"(,|$)/g").test(exceptObjName))) continue;
    if((inputObjs[i].type.toUpperCase()=="TEXT")&&(inputObjs[i].defaultValue!=inputObjs[i].value))
    return true;

    else if(((inputObjs[i].type.toUpperCase()=="RADIO")||(inputObjs[i].type.toUpperCase()=="CHECKBOX"))
    &&(inputObjs[i].defaultChecked!=inputObjs[i].checked))
    return true;

    }

    var textareaObjs=formObj.getElementsByTagName("TEXTAREA");//For Textarea Obj
    for(var i=0;i<textareaObjs.length;i++)
    {
    if((textareaObjs[i].name=="")||(eval("/(^|,)"+textareaObjs[i].name+"(,|$)/g").test(exceptObjName))) continue;
    if(textareaObjs[i].defaultValue!=textareaObjs[i].value)
    return true;

    }
    return false;
    }
      

  2.   

    <html>
    <head>
    <script>
    var haveChange=false;
    var changeWay="这些地方你作了更改,要保存吗?\n";
    function ifChange(n)
    {
    if(changeWay.indexOf(n)<=0){
    haveChange=true;
    changeWay=changeWay+";"+n;
    }}
    </script>
    </head>
    <body onunload="if(haveChange==true){if(confirm(changeWay)==true){alert('保存');}}">
    姓名<input type=text name=text1 value=t1 onChange="ifChange(previousSibling.toString())"><br>
    性别<input type=text name=text2 value=t2 onChange="ifChange(previousSibling.toString())"><br>
    年龄<input type=text name=text3 value=t3 onChange="ifChange(previousSibling.toString())"><br>
    </body></html>
      

  3.   

    直接用onpropertychange事件应该可以吧
      

  4.   

    用 obj.defaultValue==obj.value
    就可以了,一楼的正确。2楼3楼的贴那么多垃圾干什么?不过顺便说一句,这个也不绝对。
    1)用defaultValue判断不适用于checkbox, radio, file.
    2)defaultValue指的是那个生成表单元素的原始HTML赋予的初始值,
    就意味着,如果你的初始值不是从HTML赋予的(eg.javascript),
    那么,就不能用defaultValue==value来判断是否是用户有修改了。所以,另一种更可靠的方法是,在页面onload之后,记录每个表单域的初始值。
    根据元素类型的不同:
         obj.oValue = obj.value;
    或   obj.oDisabled = obj.disabled;
    或   obj.oChecked = obj.checked;
    或   obj.oSelectedIndex = obj.selectedIndex;
      

  5.   


    回复人: cuixiping(无心) ( ) 信誉:98  2005-4-5 10:53:16  得分: 5  用 obj.defaultValue==obj.value
    就可以了,一楼的正确。
    ///////////////////////////////////////////////////
    既然 1 楼的已经说了,你又罗唣些什么呢。2楼3楼的贴那么多垃圾干什么?
    //////////////////////////////////////////////////
    贴这么多的代码来帮助楼主。所以,另一种更可靠的方法是,在页面onload之后,记录每个表单域的初始值。
    /////////////////////////////////////////////////////////////////////
    爱机遇到这种“程序员”编出来的程序,算是倒了十八辈子的霉。
    不好意思。跟2楼的道个歉。
    刚才没仔细看,现在看了一下,2楼的代码是对的,也比较完善。
    ////////////////////////////////////////////////////////
    知错能改,善大莫然,以前是有眼无珠,现在终于还是找了个玻璃球塞进去了。
     
    只可惜你的脑子啊,还是空空如也!!!1、2楼给的程序都是同一个调,也就是你所认为“正确”的答案。不错,他们的答案是正确的,也是传统的、经典的但为什么我看了这么正确、经典和答案,我还是写了另一个答案呢?我仅仅是想告诉诸如你一类的人物:解决问题的方法有千千万万种,可别把你的脑子弄死了!像你这样:一进来就武断地认为一楼的正确(除了傻子外,谁都看得出来),二楼的错误,接着又发现新大陆似的“原来二楼的也正确!”——这就是脑子已经让所谓的正统知识毒死了的征兆。我不敢承认我的程序完全正确,因为当有一种情况出现时,它是不一定正确的,即:当用户更改了表单域的值,并且在该表单域失去焦点后,用户又再次回来把它改回原值。这种情况,你可以说用户修改了该表单域的值,也可以说他没有修改过表单的值。在这种情况下,如果你认为他曾经修改过表单域的值,你需要最后提醒用户到底是否要对那个表单域作更改时,那么一楼、二楼的答案就不怎么正确了;反之,我的程序就不太正确。
    你用过“记事本”程序吗?你在记事本程序中选择一段文字后按键盘上的“Ctrl + X”和“Ctrl + V”各一次,然后将记事本程序关闭,你发现了什么?它问你是否要保存更改!!!不光是“记事本”,还有“word2000”、“PhotoShop”、“Flash”和你编网页用的“DW”,几乎是所有的大型软件都是这样,那怕你将它的文档又重新改回原样,它们都依然认为你作了更改。傻瓜,你明白了什么了吗?这个贴子里的所有代码,只有我的可以做到这一点。而你一个背着两颗红星星的人却在这里说傻话,不好笑吗?
    如果你不跟 2 楼的道歉,我倒不想跟你争论些什么,偏偏你跟他道了歉,而没有跟我道歉,我一直在等你,等你看明白我的那段程序,可惜,以你的智能,我高估了你!
      

  6.   

    惭愧,
    公司之前所用的处理与三楼的方式类似
    俺到公司,之后的处理就改成了二楼的方式
    改掉只是为了偷懒,免得每个element都加onchange,道个歉应该不难
    但原谅一个人没道歉应该也不算难吧“智能”或者是“智商”
    成为尊重或轻视一个人的理由,似乎不大恰当吧