遇到了这样的问题:我在datalist里放了几个HiddenField,但要读数的时候,总显示最后一条数据。生成源码,其它数据也读出来了,可在js里就是取不出来。不解,还请达人帮助。HTML:
  <div class="pro_size">
     团费:<strong>1</strong>星
        <ul>
          <asp:DataList ID="DataList1" runat="server" RepeatDirection="Horizontal" RepeatColumns="3">
           <ItemTemplate>
    <li><span>                                                                                                              
<%# Eval("service_stars")%>
                                                                                                            </span></li>
                                                                                                            <asp:HiddenField ID="f_h1" runat="server" Value='<%# Eval("service_des") %>' />
                                                                                                            <asp:HiddenField ID="f_h2" runat="server" Value='<%# Eval("service_pice") %>' />
                                                                                                        </ItemTemplate>
                                                                                                    </asp:DataList>
  </ul>
                                                                                            </div>                 JS脚本: 
$(".pro_size li span").click(function(){                       $("#Text1").attr("value",$(this).text());                                             //填充内容
          $("#Text2").attr("value",$(" f_h1").val());//填充内容          
   })                      

解决方案 »

  1.   

    <asp:HiddenField ID="f_h1" runat="server" Value=' <%# Eval("service_des") %>' /> 楼主你去看下这个生成html的时候id会变的,当然取不到值了
    直接用<input type="hidden" ID="f_h1"  Value=' <%# Eval("service_des") %>'/>
      

  2.   

    $("#Text2").attr("value",$("#f_h1").val());//填充内容 
      

  3.   

    根据ID取还会取到最后的一个hidden的值?
      

  4.   

    只要数据取出来正常,就可以通过document.getElementsByTagName("input") 去遍历var o=document.getElementsByTagName("input");
    for(var i=0;i<o.length;i++){
    if(o[i].type=="hidden"){}
    }
      

  5.   


    //放到onload里面
            $(function() {
                $(".pro_size li span").click(function() {
                    debugger;
                    $("#Text1").attr("value", $(this).text());    //填充内容
                    $("#Text2").attr("value", $("#f_h1").val()); //填充内容
                })
            });
    如果生成的代码是下面这样的 <input type="text" id="Text1" />
        <input type="text" id="Text2" />
        <div id="div1">
            <div class="pro_size">
                <ul>
                    <li><span>test1 </span></li>
                    <li><span>test2 </span></li>
                    <input type="hidden" id="f_h1" value='f_h1' />
                    <input type="hidden" id="f_h2" value='f_h2' />
                </ul>
            </div>
        </div>
    楼主你的那个服务器端控件放在容器控件里面生成html代码的时候客户端的id会变的
    $("#f_h1").val()就会取不到值
      

  6.   

    $("#Text2").attr("value",$("input:last", $(this).parent().parent()).val());//填充内容 
      

  7.   

    JS里面应该循环赋值吧 。因为放在DATALIST里面生成多条数据。然后会生成多个不同的f_h1 ID(例如DataList1_ctl00_f_h1,DataList1_ctl01_f_h1) 因此。你直接赋给它。没有经过循环。最后只能取最后显示出的那个。不知道我说的意思你明白了没.说的错了。楼主别怪
      

  8.   

    结贴了 。sundotLei  兄的解法是正确的。需要遍历。to:LtnRain 谢谢兄台,ID是变了很多,最后我统一把ID改成生成 html后的ID了。
    就是这个:ctl00_ContentPlaceHolder1_DataList1_ctl00_f_h1。原因很简单,只是自己太大意了,数据遍历之后才能取出,原先取的都是最后一条,其它的都是无法识别。原代如下:
            var obj_this =this;
                var o=obj_this.parentNode.parentNode.getElementsByTagName('input');
                for(var i=0;i <o.length;i++){ 
                if(o[i].type=="hidden"){ 
                    if(o[i].id.indexOf('Text1')!=-1)
                       alert('当前行的ID是'+o[i].value);
                    else if(o[i].id.indexOf('Text30')!=-1)
                       alert('当前行的Name是'+o[i].value);
                } 
                }