JS直接在ONCHANGE的时候提示保存。

解决方案 »

  1.   

    html中只有fieldset没听说有field这个元素啊?你指的是表单中的字段(text,textarea,radio,checkbox,select....)?做一段js脚本,遍历text,textarea,select,把他们全部attachEvent("onchange",somefunction),遍历radio,checkbox,把他们全部("onclick",somefunction)。在somefunction里面标记当前表单已被修改,当页面onbeforeunolad的时候检查这个标记并提示。这样应该就差不多了。最后把各个页面引用这段脚本。在onload后或者defer后运行。
      

  2.   

    对头,用htc也好,不过元素多的时候慢一些,多消耗些内存。
      

  3.   

    function IsDirty(eForm)
    {
      var iNumElems = eForm.elements.length;
      for (var i=0; i<iNumElems; i++)
      {
        var eElem = eForm.elements[i];
        if ("text" == eElem.type || "TEXTAREA" == eElem.tagName)
        {
          if (eElem.value != eElem.defaultValue) return true;
        }
        else if ("checkbox" == eElem.type || "radio" == eElem.type)
        {
          if (eElem.checked != eElem.defaultChecked) return true;
        }
        else if ("SELECT" == eElem.tagName)
        {
          var cOpts = eElem.options;
          var iNumOpts = cOpts.length;
          for (var j=0; j<iNumOpts; j++)
          {
            var eOpt = cOpts[j];
            if (eOpt.selected != eOpt.defaultSelected) return true;
          }
        }
      }
      return false;
    }
    window.onbeforeunload=new Function("IsDirty(document.forms[0])")
    假设你只有一个form
    把这段代码放入js,引入即可
      

  4.   

    上面写错了
    应该再写一个函数,在函数里判断IsDirty(eForm)的返回值,如果为真,即是已被修改,
    funtion checkFormDirty(eForm)
    {
      if(!IsDirty(document.forms[0])) return false;
      return (comfirm("确认保存"))
    }
    window.onbeforeunload=new Function("checkFormDirty(document.forms[0])")
    大概是这样子
      

  5.   

    to:yonghengdizhen
    其实大概思路是这样的
    元素要是不在表单中可用document.getElementsByTagName 来循环判断
    多个表单更好办,document.forms循环一下得了
    其实用document.getElementsByTagName 就可通用
      

  6.   

    <html>
    <body>
    <form name=a>
    <input name=b value=1>
    <input name=b value=1>
    <input name=b value=1>
    <input type=checkbox value=1>
    <select name=b ><option>1</option><option>2</option></select>
    <input type=button value=ok onclick="comp()">
    </form>
    </body>
    </html>
    <script>
    var oldobj=document.all('a').cloneNode(true);//记录原始状态
    function comp() //比较
    {
    var oldeles=oldobj.elements;
    var neweles=document.all('a').elements;
    if(oldeles.length!=neweles.length) {alert("动态增加了某些元素!");return false;}
    for(var i=0;i<oldeles.length;i++)
    {
    if(oldeles[i].outerHTML!=neweles[i].outerHTML) 
    {alert("第"+(i+1)+"个元素有改变");return false;}
    }
    }
    </script>
      

  7.   

    要求有这种功能的人很可能是因为以前习惯于操作CS系统。
    其它在BS系统里,这样做的确没有什么大的必要,因为页面可以返回回来,除非你把窗口关掉。而CS通常就是关掉窗口------不知是不是这么一回事
    如果一个页面都加上这样的控制的话,可能反而让用户使用时感到系统哆嗦这样的做法,就是服务了生手用户,但是麻烦了熟手用户,JK不支持这样做