本人开发一系统,由于设计的疏忽,没有实现当用户在页面上改变field中的值后,提醒用户是否保存的功能。现在想请问各位高手,有无简便的 JS直接在ONCHANGE的时候提示保存。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 html中只有fieldset没听说有field这个元素啊?你指的是表单中的字段(text,textarea,radio,checkbox,select....)?做一段js脚本,遍历text,textarea,select,把他们全部attachEvent("onchange",somefunction),遍历radio,checkbox,把他们全部("onclick",somefunction)。在somefunction里面标记当前表单已被修改,当页面onbeforeunolad的时候检查这个标记并提示。这样应该就差不多了。最后把各个页面引用这段脚本。在onload后或者defer后运行。 对头,用htc也好,不过元素多的时候慢一些,多消耗些内存。 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,引入即可 上面写错了应该再写一个函数,在函数里判断IsDirty(eForm)的返回值,如果为真,即是已被修改,funtion checkFormDirty(eForm){ if(!IsDirty(document.forms[0])) return false; return (comfirm("确认保存"))}window.onbeforeunload=new Function("checkFormDirty(document.forms[0])")大概是这样子 to:yonghengdizhen其实大概思路是这样的元素要是不在表单中可用document.getElementsByTagName 来循环判断多个表单更好办,document.forms循环一下得了其实用document.getElementsByTagName 就可通用 <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> 要求有这种功能的人很可能是因为以前习惯于操作CS系统。其它在BS系统里,这样做的确没有什么大的必要,因为页面可以返回回来,除非你把窗口关掉。而CS通常就是关掉窗口------不知是不是这么一回事如果一个页面都加上这样的控制的话,可能反而让用户使用时感到系统哆嗦这样的做法,就是服务了生手用户,但是麻烦了熟手用户,JK不支持这样做 js操作access问题 如何用JS动态在网页顶部插入一段<iframe>? 调试打印问题!!!!神奇啊?!! 自动提交到新窗口被ie拦截 当鼠标放到一个链接上时如何在旁边显示一些提示信息?向下面的链接那样 一个超难问题,简繁转换中的图片问题? 急!!!关于剪切板操作的问题!!!! 语法高亮引擎 请问弹出WINDOWS对话狂怎么做啊 救救我啊 请问各位大虾, 散代码__一个正则表达式测试工具(带帮助)
{
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,引入即可
应该再写一个函数,在函数里判断IsDirty(eForm)的返回值,如果为真,即是已被修改,
funtion checkFormDirty(eForm)
{
if(!IsDirty(document.forms[0])) return false;
return (comfirm("确认保存"))
}
window.onbeforeunload=new Function("checkFormDirty(document.forms[0])")
大概是这样子
其实大概思路是这样的
元素要是不在表单中可用document.getElementsByTagName 来循环判断
多个表单更好办,document.forms循环一下得了
其实用document.getElementsByTagName 就可通用
<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>
其它在BS系统里,这样做的确没有什么大的必要,因为页面可以返回回来,除非你把窗口关掉。而CS通常就是关掉窗口------不知是不是这么一回事
如果一个页面都加上这样的控制的话,可能反而让用户使用时感到系统哆嗦这样的做法,就是服务了生手用户,但是麻烦了熟手用户,JK不支持这样做