在一般情况下,同一个表单只能被提交给同一个地址。但在实际web应用中,我们希望同一个表单可以根据用户的选择来完成不同的操作,即表单的分向提交。
比如说:在一个网站后台用户管理系统中,我需要对一些恶意的用户进行批量解锁,锁定用户或者删除的操作,当我选择删除会员时,我们希望表单会提交给能进行删除的处理程序,当我选择锁定会员时,我们希望表单会提交到锁定会员的处理程序,解锁会员也如此。我们极不愿意看到分别为这三个功能建立三个不同的页面,而其中仅仅是处理程序不同。
利用客户端JavaScript的功能,我们可以把三项功能简化一个界面就可以完成,一个select下拉框,其中放置要进行的操作,一个Submit按钮进行表单提交。
form表单如下:
<form action="actionPath" method="post" enctype="application/x-www-form-urlencoded" name="listform" id="listform">
<label>
<select name="operate" size="1" id="operate">
<option value="delete">删除</option>
<option value="lock">锁定</option>
<option value="unlock">解锁</option>
</select>
</label>
<input name="Submit" id="Submit" type="submit" value="确定" onclick="submitForm(this.form,'actionPath')" />
</form>
提交表单的submitForm()函数:
<!-- 其中传递的参数为表单对象的引用和表单的action文件地址 ,提交后的action为[*Action?menthod=?]-->
function submitForm(formObj,actionPath){
var select = document.getElementById("operate");
var str = [];
for(i=0;i<select.length;i++){
if(select.options[i].selected){
str.push(select[i].value);
}
}
if(confirm("确定要执行的操作吗?")){
for(var j = 0;j < str.length;j++){
formObj.action=actionPath + "?method=str[j]";
formObj.submit();
}
return true;
}
return false;
}
注意:
1、document.form.action和document.form.submit()的区别,action是属性,submit()是方法;
2、在表单中,不应有名字为action或submit这些特殊字符的标签(JavaScript区分大小写),否则IE中将会产生”对象不支持此属性和方法”的错误。