首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

jQuery获取checkboxlist值,该如何解决

2013-09-05 
jQuery获取checkboxlist值问题:当页面回传一次后,生成的span值就没有了,value也就找不到了啊,请问有什么

jQuery获取checkboxlist值

问题:
当页面回传一次后,生成的<span>值就没有了,value也就找不到了啊,请问有什么办法解决这个问题?

if (dt != null && dt.Rows.Count > 0)
{
    foreach (DataRow dr in dt.Rows)
    {
        //分别为text值、value值
        listTest.Items.Add(new ListItem(dr["Title"].ToString(), dr["ID"].ToString()));
    }
    //为ListItem对象添加alt属性,值保存value值
    foreach (ListItem li in listTest.Items)
    {
        li.Attributes.Add("alt", li.Value);
    }
}



现在,生成的html代码如下:
<table id="Table1" border="0"> 
<tr> 
    <td>
        <span alt="jQuery获取checkboxlist值,该如何解决"><input id="listTest_0" type="checkbox" name="listTest$0" />
        <label for="listTest_0">基于jQuery的一个震动效果</label></span>
    </td> 
</tr>
<tr> 
    <td><span alt="jQuery获取checkboxlist值,该如何解决"><input id="listTest_1" type="checkbox" name="listTest$1" />
    <label for="listTest_1">使用css的overflow属性改变缩略图大小</label></span>
    </td>
</tr>
</table>


从上边可以看出,多了一个span标签,里边alt的值即为我们需要的value值。使用下边的jQuery代码即可获得:
$(document).ready(function() {
    $("#btnShow").click(function() {
        var valuelist = ""; //保存checkbox选中值
        //遍历name以listTest开头的checkbox
        $("input[name^='listTest']").each(function() {
            if (this.checked) {
                //$(this):当前checkbox对象;
                //$(this).parent("span"):checkbox父级span对象
                valuelist += $(this).parent("span").attr("alt") + ",";
            }
        });


        if (valuelist.length > 0) {
            //得到选中的checkbox值序列,结果为400,398
            valuelist = valuelist.substring(0, valuelist.length - 1);
        }
    });
});




问题:
当页面回传一次后,生成的<span>值就没有了,value也就找不到了啊,请问有什么办法解决这个问题?
[解决办法]
(1)最简单的办法是每个alt都生成一个hidden。或者将alt连成一个字符串生成一个hidden
(2)自己将alt写入viewstate
[解决办法]
Page_Load的时候,都需要重新绑定一下数据.
[解决办法]
asp.net服务器的回发之后,你之所以能看到 IsPostBack 前的值,是因为asp.net在上次Render时将DataList的值写了一个ViewState,而ViewState会保存一个hidden的html控件里。现在的问题是,你回发后发现上次在DataList的Alt值不见了(也就是回发后,你用jQuery找不到的原因),有两种可能性:
(1)DataList本身不支持除form控件外的值写入ViewState。(这个只能通过测试来检查了)
(2)DataList的ViewState没有启用
如果在启用ViewState之后,还是丢失了Alt值。你就只能换一种方法保存Alt到客户端。

我之前提了两种:
(1)
foreach (ListItem li in listTest.Items)
    {
        li.Attributes.Add("alt", li.Value);
    }

把这行代码改为:
int i = 0;
foreach (ListItem li in listTest.Items)
    {
        Response.Write(string.Format("<input type='hidden' id='{0}' class='alt' name='{0}' value='{1}' />", "alt_"+i, li.Value));
        i++;
    }

也就是说将Alt值保存到多个hidden里,下次,jquery直接找$('.alt')即可找到全部的alt值了。
(2)将多个alt值连成一个字符串保存到一个hidden里。再用jquery去分解这个hidden从而得到你想要的值。

热点排行