获取网页中所有输入字段的更改的最佳方法

时间:2012-11-13 08:30:32

标签: javascript html5 jsf primefaces

我想创建一个处理页面更改的确认。例如,gmail或其他许多其他网站都有一个系统,当您更改页面中的字段,并且当您想要离开页面或清除表单输入时,该站点将创建一个确认对话框,帮助您保存您忘记的更改。这是我的解决方案,但我想知道是否有更好的方法。该项目也是JSF项目并使用primefaces 3.4
解决方案:
1.创建一个全局的js变量

var isChanges = false;
  1. 将处理程序放在onchanges方法的所有输入字段上。
  2.   

    < p:inputText value ="#{someMB.someValue}" ID =" ID"的onkeydown =" isChanges =真">< / P:inputText的>
      或
          < p:selectOneMenu value ="#{someMB.someValue}" ID ="#{cc.attrs.id}" >
                  < p:ajax事件="改变"的onSuccess =" isChanges =真" />
          < / p:selectOneMenu>
    等......


    检测用户是否离开页面或清除表单输入:

    < script language="JavaScript">
      window.onbeforeunload = confirmExit;
      function confirmExit()
      {
          if(isChanged && window.confirm("sometext")){
            // Call servers save method
          }
      }
    
    < /script>
    

1 个答案:

答案 0 :(得分:1)

在我的网络应用程序中,我这样做:

  1. 页面加载时,抓取所有表单,但具有特殊noHash
  2. 的表单除外
  3. 对于上述步骤中找到的每个表单,抓取除了具有特殊noHash
  4. 的字段之外的所有字段
  5. 序列化字符串中的字段名称和值,例如“var1 = 1&amp; var2 = 2 [...]”
  6. 计算上面定义的字符串sha1
  7. 将结果存储为全局变量
  8. 然后,当用户试图离开时,我重新计算哈希,如上所述,看看哈希值是否不同,如果是,我会在离开页面之前提示用户进行确认。

    请注意,这是全部使用javascript完成的,因此独立于您的服务器端脚本语言。