处理动态生成若干不定个数checkbox并返回checked状态的id到后台

页面动态的产生若干个checkbox(比如100)

每个checkbox可以单独勾选

有一个按钮按下之后需要提交选中的checkbox对应的数据bean的id到后台

<script type="text/JavaScript">
<!--
function add(id,obj){
var isChecked=false;
if(obj.checked)
{
var isChecked=true;
}
alert(isChecked);
if(isChecked==true)
{
var old=getCookie("listSightIds");
alert("old:"+old);
if(null!=old&&""!=old)
{
old=old+","+id;
}
else
{
old=id;
}
setCookie("listSightIds",old,1);
alert(" old after:"+old+", and setCookie :"+getCookie("listSightIds"));
}
else
{
removeCookie(listSightIds);
}

}

function setCookie(c_name,value,expiredays)
{
var exdate=new Date()
exdate.setDate(exdate.getDate()+expiredays)
document.cookie=c_name+ "=" +escape(value)+
((expiredays==null) ? "" : ";expires="+exdate.toGMTString())
}

function getCookie(c_name)
{
if (document.cookie.length>0)
{
c_start=document.cookie.indexOf(c_name + "=")
if (c_start!=-1)
{
c_start=c_start + c_name.length+1
c_end=document.cookie.indexOf(";",c_start)
if (c_end==-1) c_end=document.cookie.length
return unescape(document.cookie.substring(c_start,c_end))
}
}
return ""
}

function removeCookie(c_name)
{
setCookie(c_name,"",-1);
}
//-->
</script>



  <s:iterator value="sightsForSs"  status="status"   id="index">

<s:if test="#status.index % 4 == 0">
<tr>
</s:if>
<td>
<input type="checkbox" onclick="javascript:add('<s:property value='#index.id' />',this);" id="<s:property value='#index.id' />"><a target="_blank" href = "<%=ctx %>/cityDo!getSightById?sightId=<s:property value='#index.id' />"><s:property value="#index.sightName" /></a>
</td>
<s:if test = "#status.index % 4 == 3 || #status.last">
</tr>
</s:if>
</s:iterator>



好像不可以 添加时可以的 删除确实问题

一是增加一个cookie值 记录被删除的id 不去除重复 后台用linkedlist和hashmap 处理 成一个不重复的 id序列 来记录
二 是换一个处理方法

待续

发现这个方法很繁琐 所以考虑换个方法了

考虑用struts2的标签库 s:checkboxlist
代码如下
<s:checkboxlist name="sights" list="listSight" listKey="id" listValue="sightName"  />


提交之后 在action定义 private String sights

得到的提交过来的格式是 listKey对应的值 以逗号隔开 比如 1235,2354,1225
这样的东西是合要求的 但是又有两个新问题
1 显示乱且不间隔 理想状态时需要每行四个
2 无法在每个checkbox后面的文字加上a链接

对于问题1 解决方法是修改 struts core包底下有个template.simple包下的 checkboxlist.ftl 在src建一个template.simple包 拷贝文件 修改为

<#assign itemCount = 0/>
<#if parameters.list??>
<@s.iterator value="parameters.list">
<#assign itemCount = itemCount + 1/>
<#if parameters.listKey??>
<#assign itemKey = stack.findValue(parameters.listKey)/>
<#else>
<#assign itemKey = stack.findValue('top')/>
</#if>
<#if parameters.listValue??>
<#assign itemValue = stack.findString(parameters.listValue)?default("")/>
<#else>
<#assign itemValue = stack.findString('top')/>
</#if>
<#assign itemKeyStr=itemKey.toString() />
[b] <#if (itemCount-1)%4 == 0>
<tr>
</#if>[/b]
<td>
<input type="checkbox" name="${parameters.name?html}" value="${itemKeyStr?html}" id="${parameters.name?html}-${itemCount}"<#rt/>

<#if tag.contains(parameters.nameValue, itemKey)>
checked="checked"<#rt/>
</#if>
<#if parameters.disabled?default(false)>
disabled="disabled"<#rt/>
</#if>
<#if parameters.title??>
title="${parameters.title?html}"<#rt/>
</#if>
<#include "/${parameters.templateDir}/simple/scripting-events.ftl" />
<#include "/${parameters.templateDir}/simple/common-attributes.ftl" />
/>
<label for="${parameters.name?html}-${itemCount}" class="checkboxLabel">${itemValue?html}</label>
</td>
<#if itemCount%4 == 0>
</tr>
</#if> ]
</@s.iterator>
<#else>
 
</#if>
<input type="hidden" id="__multiselect_${parameters.id?html}" name="__multiselect_${parameters.name?html}" value=""<#rt/>
<#if parameters.disabled?default(false)>
disabled="disabled"<#rt/>
</#if>
/>


但是对于第二个问题 可能也是修改这个模板文件 但是还有问题 如果我把sightname需要连接的动态生成的a标签 写死在ftl文件中 那么其他可以用到这个checkboxlist的情况也无法共存

只有放弃这个方案 最后决定将提交页面放在js中做
利用s:iterator动态产生有a标签的checkbox 在js中过滤所有选中checked状态的checkbox 取出id值 组装成一个string传参到后台

我采用jquery
<s:iterator value="sightsForSs"  status="status"   id="index">

<s:if test="#status.index % 4 == 0">
<tr>
</s:if>
<td>
<input type="checkbox" id="<s:property value='#index.id' />"><a target="_blank" href = "<%=ctx %>/cityDo!getSightById?sightId=<s:property value='#index.id' />"><s:property value="#index.sightName" /></a>
</td>
<s:if test = "#status.index % 4 == 3 || #status.last">
</tr>
</s:if>
</s:iterator>


jquery部分

var str="";

$(document).ready(function()
{
$("#nextButton").click(function(){
alert("nextButton");
str="";
getString();
alert("all String is:"+str);
});
});
function getString()
{
$("input::checked").each(function(i){
var st=$(this).attr("id");
if(""==str)
{
str=st;
}
else{
str=str+","+st;
}
});


}


最后的str就是需要的id串 至此问题解决 每行四个checkbox check框对齐 sightname值带一个a标签查看详细 提交js处理成id串提交后台action处理
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值