`
nickdine
  • 浏览: 44371 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

处理动态生成若干不定个数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>
  &nbsp;
</#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处理


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics