自动识别页面上的所有控件是否被改变过
2015-06-19 13:41
295 查看
在页面开发的新增或者修改的时候,有时候给页面上的所有控件赋值完之后,点击保存,此页面不关闭,那么问题来了,如果页面上所有的值都不改变,这时候如果继续进行保存操作,着实有些不妥,那么就需要判断页面上的所有控件是否被改变过,接下来方法如下:
1、js如下:
var inputsData;
var textareasData;
var selectsData;
$(function () {
inputLoad();
});
function inputLoad() {
var inputs = document.getElementsByTagName("input");
var textareas = document.getElementsByTagName("textarea");
var selects = document.getElementsByTagName("select");
inputsData = new Array(inputs.length);
for (var i = 0; i < inputs.length; i++) {
inputsData[i] = inputs[i].value;
if (inputs[i].type == "radio") {
inputsData[i] = inputs[i].checked;
}
}
textareasData = new Array(textareas.length);
for (var i = 0; i < textareas.length; i++) {
textareasData[i] = textareas[i].value;
}
selectsData = new Array(selects.length);
for (var i = 0; i < selects.length; i++) {
selectsData[i] = selects[i].value;
}
}
//验证页面是否通过,返回 true = 通过,false = 不通过
//IsAlert = (0 = 不提示,1 = alert提示,2 = confirm提示)
//errorMessage = ('0' = 不提示 ,其他为验证不通过时提示文字)
//SumbitID =('0' = 提示完成后不做提交操作,非空则为页面某按钮ID,做click操作)
//isCheckButton = (是否对比button按钮, true = 对比, false = 不对比)
function checkPage(isAlert, errorMessage, SumbitID, isCheckButton) {
// alert("我是子页面");
var ReturnBool = false;
var inputs = document.getElementsByTagName("input");
var textareas = document.getElementsByTagName("textarea");
var selects = document.getElementsByTagName("select");
var hasBeenChanged = false;
for (var i = 0; i < inputs.length; i++) {
var istrue = true;
if (!isCheckButton && inputs[i].type == "submit") {
istrue = false;
}
if (istrue) {
if (inputs[i].type == "radio" && (inputs[i].checked != inputsData[i])) {
hasBeenChanged = true;
inputsData[i] = inputs[i].checked;
}
if (inputs[i].type != "radio" && inputsData[i] != inputs[i].value) {
if (inputs[i].name != "actionType") {
hasBeenChanged = true;
}
inputsData[i] = inputs[i].value;
}
}
}
for (var i = 0; i < textareas.length; i++) {
if (textareasData[i] != textareas[i].value) {
hasBeenChanged = true;
textareasData[i] = textareas[i].value;
}
}
for (var i = 0; i < selects.length; i++) {
if (selectsData[i] != selects[i].value) {
hasBeenChanged = true;
selectsData[i] = selects[i].value;
}
}
if (hasBeenChanged) {
var rbool = false;
if (isAlert == 0) {
rbool = true;
} else if (isAlert == 1) {
alert(errorMessage)
}
if (isAlert == 2) {
if (confirm(errorMessage)) {
rbool = true;
}
}
if (rbool == true) {
if (SumbitID != 0) {
$("#" + SumbitID).click();
}
}
ReturnBool = true;
}
return ReturnBool;
}
2、页面上引用该JS
<asp:Button class="res" ID="btnSave" runat="server" Text="保存" OnClientClick="return checkPage(0,'',0,true);" onclick="btnSave_Click" />
该js中引用的参数视情况而定,其作用在js中有所详述。
3、保存完之后,引用js中的inputLoad()方法
Page.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('数据添加成功');inputLoad();</script>");
ok了,就是该js总没有判断<input type='file'>的内容,所以,该方法还有待改进。
1、js如下:
var inputsData;
var textareasData;
var selectsData;
$(function () {
inputLoad();
});
function inputLoad() {
var inputs = document.getElementsByTagName("input");
var textareas = document.getElementsByTagName("textarea");
var selects = document.getElementsByTagName("select");
inputsData = new Array(inputs.length);
for (var i = 0; i < inputs.length; i++) {
inputsData[i] = inputs[i].value;
if (inputs[i].type == "radio") {
inputsData[i] = inputs[i].checked;
}
}
textareasData = new Array(textareas.length);
for (var i = 0; i < textareas.length; i++) {
textareasData[i] = textareas[i].value;
}
selectsData = new Array(selects.length);
for (var i = 0; i < selects.length; i++) {
selectsData[i] = selects[i].value;
}
}
//验证页面是否通过,返回 true = 通过,false = 不通过
//IsAlert = (0 = 不提示,1 = alert提示,2 = confirm提示)
//errorMessage = ('0' = 不提示 ,其他为验证不通过时提示文字)
//SumbitID =('0' = 提示完成后不做提交操作,非空则为页面某按钮ID,做click操作)
//isCheckButton = (是否对比button按钮, true = 对比, false = 不对比)
function checkPage(isAlert, errorMessage, SumbitID, isCheckButton) {
// alert("我是子页面");
var ReturnBool = false;
var inputs = document.getElementsByTagName("input");
var textareas = document.getElementsByTagName("textarea");
var selects = document.getElementsByTagName("select");
var hasBeenChanged = false;
for (var i = 0; i < inputs.length; i++) {
var istrue = true;
if (!isCheckButton && inputs[i].type == "submit") {
istrue = false;
}
if (istrue) {
if (inputs[i].type == "radio" && (inputs[i].checked != inputsData[i])) {
hasBeenChanged = true;
inputsData[i] = inputs[i].checked;
}
if (inputs[i].type != "radio" && inputsData[i] != inputs[i].value) {
if (inputs[i].name != "actionType") {
hasBeenChanged = true;
}
inputsData[i] = inputs[i].value;
}
}
}
for (var i = 0; i < textareas.length; i++) {
if (textareasData[i] != textareas[i].value) {
hasBeenChanged = true;
textareasData[i] = textareas[i].value;
}
}
for (var i = 0; i < selects.length; i++) {
if (selectsData[i] != selects[i].value) {
hasBeenChanged = true;
selectsData[i] = selects[i].value;
}
}
if (hasBeenChanged) {
var rbool = false;
if (isAlert == 0) {
rbool = true;
} else if (isAlert == 1) {
alert(errorMessage)
}
if (isAlert == 2) {
if (confirm(errorMessage)) {
rbool = true;
}
}
if (rbool == true) {
if (SumbitID != 0) {
$("#" + SumbitID).click();
}
}
ReturnBool = true;
}
return ReturnBool;
}
2、页面上引用该JS
<asp:Button class="res" ID="btnSave" runat="server" Text="保存" OnClientClick="return checkPage(0,'',0,true);" onclick="btnSave_Click" />
该js中引用的参数视情况而定,其作用在js中有所详述。
3、保存完之后,引用js中的inputLoad()方法
Page.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('数据添加成功');inputLoad();</script>");
ok了,就是该js总没有判断<input type='file'>的内容,所以,该方法还有待改进。
相关文章推荐
- 15 3Sum
- HDU 1007 Quoit Design
- 两数之和
- openlayers Uncaught TypeError: Cannot read property 'wrapDateLine' of null
- sqlite python脚本
- iOS使用脚本批量打渠道包
- 用户调查报告
- [IOS]从相册获取图片和视频进行上传
- C# unicode编码 中文显示
- a href=#与 a href=javascript:void(0) 的区别
- jquery 同步和异步请求
- centos redis自启动相关
- mysql grant
- 抢答器设计
- 手机安全卫士02
- aptitude与apt-get常用选项
- Storm WordCount Topology学习
- Unable to open connection to supplicant on "/data/misc/wifi/sockets/wlan0"
- jvm之xms、xmx等参数分析
- 【性能诊断】七、并发场景的性能分析(windbg案例,线程阻塞)