【问题标题】:How do I hide the borders around checkboxes in an ASP.Net CheckBoxList control with jQuery?如何使用 jQuery 在 ASP.Net CheckBoxList 控件中隐藏复选框周围的边框?
【发布时间】:2013-12-23 00:24:39
【问题描述】:

我需要去掉 CheckBox 控件呈现的各个复选框周围的边框。这是它现在的样子:

ASP.Net 标记很简单:

<asp:CheckBoxList ID="cblEthnicity" runat="server" RepeatDirection="Vertical"
  RepeatColumns="3" RepeatLayout="Table" BorderStyle="None" BorderWidth="0">
</asp:CheckBoxList>

它位于应用了formTable 类的表格的单元格中(见下文)。

如您所见,我已尝试将属性 BorderStyle="None"BorderWidth="0" 设置为无效。

我很确定这背后是下面的 CSS,它在封闭的表格单元格周围放置了圆角边框,我想保留它:

.formTable
{
  background-color: #eeeeee;
  border: solid 1px #bbbbbb;
  -moz-border-radius: 7px;
  -webkit-border-radius: 7px;
  border-radius: 7px;
}
.formTable tr, .formTable tr td, .formTable tr th
{
  background-color: #eeeeee;
  padding: 3px;
  border: solid 1px #bbbbbb;
  vertical-align: top;
}

我添加了以下 CSS,它也没有做任何事情:

.formTable tr td input[type="checkbox"]
{
  border: none;
}

最后,从 .aspx 为 CheckBoxList 呈现的 HTML(如 Chrome DevTools 中所示)如下所示(为简洁起见,稍作编辑):

<table id="main_cblEthnicity" style="border-width:0px; border-style:None; border-top-left-radius:5px; border-top-right-radius:5px; border-bottom-left-radius:5px; border-bottom-right-radius:5px;">
  <tbody>
    <tr>
      <td style="border-top-left-radius:5px; border-top-right-radius:5px; border-bottom-left-radius:5px; border-bottom-right-radius:5px;">
        <input id="main_cblEthnicity_0" type="checkbox" name="ctl00$main$cblEthnicity$0"
          checked="checked" value="Native American" />
        <label for="main_cblEthnicity_0">Native American</label>
      </td>
      ...
    </tr>
  </tbody>
</table>

关于如何摆脱不需要的边框有什么建议吗?

更新:这里有一些图片可以更清楚地说明正在发生的事情以及我想要完成的事情:

这就是我现在得到的:

如果我使用迄今为止提出的任何一个建议,这就是我得到的结果:

这就是我想要实现的目标:

除了这里提出的建议之外,我还尝试将其添加到 CSS 中,但没有任何区别:

.formTable tr td > input[type="checkbox"] {
  border: none;
}

我也在 Javascript/jQuery 中试过这个:

<script type="text/javascript">
  $(document).ready(function() {
    $('.formTable tr td > input[type="checkbox"]').removeAttr("border");
  });
</script>

【问题讨论】:

  • 你能发布一个问题的小提琴吗?另外 - 这发生在哪个浏览器中?
  • 您无法删除本机浏览器复选框边框。实现您自己的自定义元素
  • @A.Wolff 这不是我想要做的;我正在尝试删除各个复选框周围的表格单元格边框。
  • @Yuriy 我看看能不能;这会很困难,因为这是我正在处理的 ASP.Net 生成的 HTML。无论我使用哪种浏览器,我都会得到相同的结果。

标签: jquery html asp.net css


【解决方案1】:

问题不在于input,而在于td。 看:

<td style="border-top-left-radius:5px; border-top-right-radius:5px; border-bottom-left-radius:5px; border-bottom-right-radius:5px;">

这里(上图)定义了边界半径。这里(下)边框颜色:

.formTable tr, .formTable tr td, .formTable tr th
{
    background-color: #eeeeee;
    padding: 3px;
    border: solid 1px #bbbbbb;
    vertical-align: top;
}

所以,要改变这一点,你可能想在上面的 CSS 代码之后添加:

.formTable tr td
{
    border:0;
}

这样做,您只会使 td 边框消失,而不是 trth 的边框

OP 澄清后更新

哦,好吧。现在有了这些新的屏幕截图,我们可以清楚地看到您想要实现的目标。 无论如何,您仍在尝试从输入中删除边框,但我再说一遍,问题不是输入,而是 td。

我会用你给我们的代码来解释你好吗?所以:

<table id="main_cblEthnicity" style="border-width:0px; border-style:None; border-top-left-radius:5px; border-top-right-radius:5px; border-bottom-left-radius:5px; border-bottom-right-radius:5px;">
  <tbody>
    <tr>
      <td style="border-top-left-radius:5px; border-top-right-radius:5px; border-bottom-left-radius:5px; border-bottom-right-radius:5px;">
        <input id="main_cblEthnicity_0" type="checkbox" name="ctl00$main$cblEthnicity$0"
          checked="checked" value="Native American" />
        <label for="main_cblEthnicity_0">Native American</label>
      </td>
      ...
    </tr>
  </tbody>
</table>

这是所有复选框内的表格的 HTML 代码。所有它的 TD 都有圆形边框和我们已经知道的东西。这个包含所有这些复选框的表格位于更大的 TD(您要保留的边框)内。我们处于以下情况:

所以现在你有两种方法可以在不改变所有 HTML 的情况下采取行动:CSS 或 jQuery。

CSS 方式

非常简单,您可能希望在这些表格单元格(其中包含复选框)中添加内联样式,如下所示:style="border:0" 而不是style="border-top-left-radius:5px; border-top-right-radius:5px; border-bottom-left-radius:5px; border-bottom-right-radius:5px;"。或者像这样创建一个新的 CSS 类

.no-borders {
    border:0;
}

并将其应用于您不想看到的每个 td。

jQuery 方式

<script type="text/javascript">
  $(document).ready(function() {
    $('.formTable input[type="checkbox"]').parent().css('border','none');
  });
</script>

【讨论】:

  • 是的,这正是我的想法。即使我猜 OP 正在谈论复选框元素边框
  • 除此之外,就像 Yuriy 的回答一样,这消除了我想保留的表格单元格周围的边框;我只想摆脱单个复选框单元格周围的那个(ASP.Net 将 CheckBoxList 呈现为表格)。如果我将 CheckBoxList 的渲染模式更改为 Flow,它看起来很糟糕。
  • @timbck2:我已经看到,只有在我更新之后,您才可能在下面的 cmets 中解决了 Wolff 的问题。无论如何,如果您愿意,我向您解释了为什么问题出在 TD 而不是 INPUT。只是阅读,因为它会在未来对你有用
  • 我完全理解问题出在表格单元格而不是复选框本身,我只是不知道如何编写一个可以捕获它们的选择器。我选择使用您建议的 jQuery 方法,因为在 ASP.Net 生成的 HTML 上更改样式很困难。谢谢!
【解决方案2】:

您的代码没有显示它,但显然在某些时候类.formTable 被分配给CheckBoxList。只需从第二类声明中删除border: solid 1px #bbbbbb;

.formTable tr, .formTable tr td, .formTable tr th
{
  background-color: #eeeeee;
  padding: 3px;
  vertical-align: top;
}

演示:http://jsfiddle.net/pgpR3/1/

【讨论】:

  • 如果我这样做,我会丢失表格单元格周围的边框,我想保留这些边框。我认为这是因为 ASP.Net 将 CheckBoxList 呈现为表,并且出于某种原因.formTable 被应用于表中的表。不,我不能将 CheckBoxList 的渲染更改为 Flow,它看起来像废话。
  • 您的意思是要删除实际复选标记周围的边框吗?
  • 不,就在复选框所在的 ASP.Net 生成的表格单元格周围。我将模拟一张我希望它看起来像什么的图像并将其发布出来。
  • @timbck2 是的,发一张图片
  • 完成 - 我发布了三张图片,说明了正在发生的事情以及我想要实现的目标。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-22
相关资源
最近更新 更多