0

假设我们有一个简单的 asp.net 中继器,我们连续有一个复选框、一个标签(记录的数据库 ID)并且不可见(用于回发)和一个文本(在 tabelcell 中)

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

有人为此提供链接或解决方案,也许已经使用 jQuery?

编辑:正如我所说,它是一个 asp.repeater。并且表格用于布局,因此使用 checkbox.text 属性是不可设计的(例如换行)复选框和文本的 id 在转发器的呈现时动态添加/更改。因此标签解决方案也不起作用。

4

4 回答 4

8

假设你不需要 jQuery 和 table-construct

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

这基本上呈现了 Ricardo Vega 提供的解决方案,无论您在复选框的属性文本中得到什么都是可点击的,并且选中/取消选中复选框......因此您应该使用 <%# 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:Label-Element 的 Text-attribute!

于 2009-01-29T11:29:43.920 回答
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”。

于 2009-01-29T10:54:26.330 回答
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
    }
});
于 2009-01-29T11:40:00.263 回答
0

这样的事情怎么样?

$('.yourtableclass td').click( function( e ) {
    var cb = $(this).children('input[type=checkbox]').get(0);
    cb.checked = !cb.checked;
});
于 2009-01-29T10:48:22.333 回答