2009-01-29 144 views
0

说我们有简单的asp.net转发器, 在一行中我们有一个复选框,一个标签(记录的数据库ID)和不可见(用于回发)和一个文本(在一个tabelcell中)复选框选择/取消选择中继器时点击文本

现在我想让它像在windows中一样,如果你点击文本,应该选择或取消选择复选框。

有人为此链接或解决方案,也许已经与jQuery?

编辑:正如我所说,它是一个asp.repeater。并且该表用于布局,所以使用checkbox.text属性是不可设计的(例如换行) 复选框和文本的ID在渲染中继器时动态添加/更改。因此标签解决方案也没有真正的工作。

回答

8

假设你wont't需要jQuery和表,构建

<asp:Repeater runat="server"> 
    <ItemTemplate> 
     <asp:CheckBox runat="server" Text="your text" /> 
    </ItemTemplate> 
</asp:Repeater> 

这使得基本上是由里卡多·维加 无论你在复选框的属性文本得到的是点击,并检查/提供的解决方案取消选中该复选框...为此你应该使用<%#的eval( “...”)%> 可以皮肤(通过CSS)的标签

编辑的保证金:

再次思考之后,还有另一种解决方案:

<asp:Repeater runat="server"> 
    <HeaderTemplate> 
     <table> 
    </HeaderTemplate> 
    <ItemTemplate> 
     <tr> 
      <td><asp:Checkbox runat="server" ID="checkbox" /></td> 
      <td><asp:Label runat="server" AssociatedControlID="checkbox">Your text</asp:Label></td> 
     </tr> 
    </ItemTemplate> 
    <FooterTemplate> 
     </table> 
    </FooterTemplate> 
</asp:Repeater> 

提示:您可以使用ASP的Text属性:标签的元素或者!

+0

好的答案,抱歉回答没有ASP知识。也许最好使用最简单的方法,而不是增加一层复杂性。 – 2009-01-29 11:43:11

+0

Sooooooo很高兴我不用ASP工作;)但是+1不用JavaScript。 – roborourke 2009-01-29 11:56:17

0

这样的事情呢?

$('.yourtableclass td').click(function(e) { 
    var cb = $(this).children('input[type=checkbox]').get(0); 
    cb.checked = !cb.checked; 
}); 
4

也许我不完全理解,但你为什么不在标签标签中使用html属性“for”?

像:

<label for="field_id">Checkbox 1</label> 
<input id="field_id" type="checkbox" /> 

,这将让该复选框充当点击,如果点击该标签。所以你不必依赖JS来做到这一点。

编辑: 如果你真的真的想使用jQuery这个:

$('td').click(function(){ 
    $(':checkbox',this).attr('checked',!$(':checkbox',this).attr('checked')); 
}); 

更改 'TD' 需要。

+0

也许复选框需要是一个asp控件才能获得检查状态。因此clientid会动态呈现,不能在itemtemplate里面用于标签 – 2009-01-29 11:22:27

1

如果你使用其中一个jQuery点击解决方案,请确保忽略由复选框本身触发的点击事件。

$('td').click(function(e){ 
    if (!$(e.target).is(':checkbox')) { // toggle only on non-checkbox click 
     var checked = $(':checkbox', this).attr('checked'); 
     $(':checkbox', this).attr('checked', !checked); // toggle 
    } 
});