在项目开发的过程中经常涉及到表单提交的问题,为了使得处理更加灵活一种情况是不设死表单的action属性,而是在后台设置,再显示到前台的jsp中,这是一种情况,这种情况处理起来还是不怎么轻松的。当一个表单中有多个非type为submit的按钮时,当点击按钮做一些判断以后,还是希望把表单项传递给后台,再写这篇文章之前我是这样傻傻处理的,因为表单有个循环,循环中有很多的checkbox,我要做的是当点击按钮的时候做一下判断,然后把这些checkbox的值传递给后台,如果是直接表单提交的话,直接在后台用request.getParameterValues()这种方式就可以了,但是现在我不是直接表单提交(当时傻傻的没想到还是用表单提交),我处理的是在js中设置转向,也就是重新设置window.location.href的值,不过这样就有一个问题,这些同名的checkbox怎样才能传递给后台了,url只能待String类型的参数,那怎么办了,你看我是怎么处理的:
js中:
//处理选择值 var pids=""; idsCheck.each(function(){ pids+=$(this).val()+","; }); window.location.href=""cp.jsp?ac=product&manage=recommend&op=add&ids="+pids";
我的思路就是把这些值组成一个String,带在url中传递给后台,在后台再用String的split方法来拆成String数组,你说傻不傻,这一看就是非常规的处理方法,一直告诫自己如果你用了非常规方法,这时候后你就要想想其他的思路了,非常规方法虽然达到了效果,但是是不值得的,所以处理问题一定要先从常规的处理方法出发。
对于上面这种情况,应该怎么解决了。我觉得首先你要弄清楚你要干什么,你不就是希望点击不同的按钮后台能有不同的处理方式吗,既然你可以在js中动态转向,那为什么不直接设计form的action属性使得它提交给不同的处理方法呢,这样数据传送就方便了很多,这种处理方法相当简单,js代码如下:
//商品上架 function onsale(){ var idsCheck = $(".list input[name='ids']:checked");// ID复选框 if(idsCheck.length ===0){ alert("请选中要上架的宝贝!"); return; } var $listForm = $(".list form");// 列表表单 //重新设置表单action $listForm.attr("action","cp.jsp?ac=product&manage=list&op=onsale"); $listForm.submit(); }
这个方法的思路就是,在提交表单之前,重新设置form的action,简单吧!
“海燕啊,你说你是不是傻,是不是傻”