之前我遇到过在form表单提交前让我用js检测一下form表单的元素是否有被修改过,若没有被修改过,则不提交表单;若有更新项,才提交。
在网上翻阅了一番之后,自己整理了一下。不多说,上代码(ps.记住,一定要给表单一个ID)。
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script type="text/javascript">
Array.prototype.inArray = function (value) {
for (var i = 0; i < this.length; i++) {
if (this[i] == value) {
return true;
}
}
return false
};
function IsFormChanged(el) {
var tips = "";
var arr1 = new Array();
var arr2 = new Array();
var isChanged = false;
var itemVal = '';
var form = document.getElementById(el);
for (var i = 0; i < form.elements.length; i++) {
var element = form.elements[i];
var type = element.type;
switch (type) {
case "text":
case "hidden":
case "textarea":
case "button":
tips += (element.value != element.defaultValue) ? tips.length == 0 ? element.name + "='" + escape(element.value) + "'" : "&" + element.name + "='" + escape(element.value) + "'" : "";
break;
case "radio":
if (!arr1.inArray(element.name)) {
arr1.push(element.name);
var myRadio = document.getElementsByName(element.name);
for (var k = 0; k < myRadio.length; k++) {
tips += (myRadio[k].checked && !myRadio[k].defaultChecked) ? tips.length == 0 ? myRadio[k].name + "='" + myRadio[k].value + "'" : "&" + myRadio[k].name + "='" + myRadio[k].value + "'" : "";
}
}
break;
case "checkbox":
if (!arr2.inArray(element.name)) {
arr2.push(element.name);
isChanged = false;
var myBox = document.getElementsByName(element.name);
itemVal = '';
for (var k = 0; k < myBox.length; k++) {
if (myBox[k].checked) {//当前checkbox被选中
if (!myBox[k].defaultChecked) {
isChanged = true
}//是否与初始状态不同,如果是则标记为当前checkbox需更新
itemVal += itemVal.length == 0 ? myBox[k].value : "," + myBox[k].value;//同一name追加值
} else {
if (myBox[k].defaultChecked) {
isChanged = true;//初始化时为选中状态但当前未选中,标记该复选框组值需更新
}
}
}
if (isChanged) {
itemVal = element.name + "='" + itemVal + "'";
tips += tips.length == 0 ? itemVal : '&' + itemVal
}
}
break;
case "select-one":
for (var j = 0; j < element.options.length; j++) {
tips += (element.options[j].selected && !element.options[j].defaultSelected) ? tips.length == 0 ? element.name + "='" + element.value + "'" : "&" + element.name + "='" + element.value + "'" : "";
}
break;
case "select-multiple":
isChanged = false;
itemVal = '';
for (var j = 0; j < element.options.length; j++) {
if (element.options[j].selected) {
if (!element.options[j].defaultSelected) {
isChanged = true
}//是否与初始状态不同,如果是则标记为当前select需更新
itemVal += itemVal.length == 0 ? element.options[j].value : "," + element.options[j].value;//同一个元素只追加值
} else {
if (element.options[j].defaultSelected) {
isChanged = true;//初始化时为选中状态但当前未选中,标记该select值需更新
}
}
}
if (isChanged) {
itemVal = element.name + "='" + itemVal + "'";
tips += tips.length == 0 ? itemVal : '&' + itemVal
}
break;
}
}
tips.length == 0 ? alert('没有更新项') : alert(tips);
}
</script>
<form id="chageform" action="">
text:<input type="text" name="txt1" value="1"/><br/>
myBox:<input type="checkbox" name="myBox" checked="checked" value="1"/>
<input type="checkbox" name="myBox" value="2"/>
<input type="checkbox" name="myBox" value="3"/><br/>
myBox2:<input type="checkbox" name="myBox2" checked="checked" value="4"/>
<input type="checkbox" name="myBox2" checked="checked" value="5"/>
<input type="checkbox" name="myBox2" value="6"/><br/>
myRadio:<input type="radio" name="myRadio" checked="checked" value="1"/>
<input type="radio" name="myRadio" value="2"/><br/>
myRadio2:<input type="radio" name="myRadio2" value="1"/>
<input type="radio" name="myRadio2" checked="checked" value="2"/><br/>
mySel:<select name="mySel">
<option value="1" selected="selected">1</option>
<option value="2">2</option>
</select><br/>
mySel2:<select name="mySel2">
<option value="1">1</option>
<option value="2" selected="selected">2</option>
</select><br/>
mySel3:<select name="mySel3" multiple="multiple" style="width:50px;">
<option value="1">1</option>
<option value="2" selected="selected">2</option>
<option value="3">3</option>
<option value="4" selected="selected">4</option>
<option value="5">5</option>
</select><br/>
mySel4:<select name="mySel4" multiple="multiple" style="width:50px;">
<option value="1">1</option>
<option value="2" selected="selected">2</option>
<option value="3">3</option>
<option value="4" selected="selected">4</option>
</select><br/>
<input type="button" value="检测" οnclick="IsFormChanged('chageform')"/>
</form>
</body>
</html>