【问题标题】:.prop, .attr not working when trying to disable asp:CheckBox.prop、.attr 在尝试禁用 asp:CheckBox 时不起作用
【发布时间】:2013-03-02 00:12:00
【问题描述】:

我有一堆 asp:checkboxs。它们中的大多数都有一个“受限”类,并且它们都有 clientIdMode='static'。我有一个 id='other' 的单独复选框。单击此框时,我希望禁用带有 class='restricted' 的框。问题是我无法让它在 Firefox 或 Chrome 中运行。我在网上找到了一堆相关的问题,但没有真正的答案。

$('#other').click(function() {
    if ($(this).is(":checked")) {
        $(".restricted").prop("disabled", "disabled");
    }
    else {
        $(".restricted").prop("disabled", false);
    }
});

我尝试过使用 .prop、.attr、("disabled", true) 和 ("disabled", "disabled") 的组合,但无法在 IE 之外使用。

编辑:这里还有一些 html:

<fieldset>
    <legend>Accessories</legend>
    <ol>
        <li>
            <asp:CheckBox ID="cb1" runat="server" ClientIDMode="Static" CssClass="restricted" />
            <label for="cb1">VAL 1</label>
        </li>
        <li>
            <asp:CheckBox ID="cbP2" runat="server" ClientIDMode="Static" CssClass="restricted" />
            <label for="cb2">VAL 2</label>
        </li>
        <li>
            <asp:CheckBox ID="cb3" runat="server" ClientIDMode="Static" CssClass="restricted" />
            <label for="cbPickupInside">VAL 3</label>
        </li>
        <li>
            <asp:CheckBox ID="cb4" runat="server" ClientIDMode="Static" CssClass="restricted" />
            <label for="cb4">Value 4</label>
        </li>
    </ol>
</fieldset>

当被点击的复选框应该禁用另一个:

<fieldset>
<ol>
    <li>
        <asp:CheckBox ID="cbG" runat="server" ClientIDMode="Static" />
        <label for="cbG">VAL G</label>
    </li>

【问题讨论】:

  • 如果你使用的是 asp:checkbox,那不是 id,asp 会将 ID 转换成这个巨大的字符串。我会改用一个类。
  • @LifeInTheGrey 通常会添加“ct100”或类似的东西作为前缀。但这很不可靠,imo。
  • 哈哈确实不可靠,我看到它做了一些疯狂的疯狂的事情。要么把它变成一个 html 文本框,然后给它runat="server" 让它与 ASP 一起工作,或者让它成为一个类。
  • 我认为 ClientIDMode='Static' 保持 id 相同...如果我在浏览器中检查复选框,它会向我显示复选框 id='other'。该名称确实获得了添加的前缀。
  • 我在这里修改了你的代码:jsfiddle.net/pyQ2x -- 似乎在 IE9 和 Chrome 中工作......

标签: jquery google-chrome firefox checkbox prop


【解决方案1】:
$('#other').click(function() {
        if ($(this).is(":checked")) {
            $(".restricted input").prop("disabled", "disabled");
        }
        else {
            $(".restricted input").prop("disabled", false);
        }
    });

我通过在类选择器之后添加输入选择器来修复它。输入周围的跨度实际上是类,所以我猜 IE 找到了跨度并针对输入运行代码。 Chrome 和 Firefox 必须在 span 处停止。

【讨论】:

    【解决方案2】:

    如果这是一个 asp 复选框,目标如下:

    $("#<%=other.ClientID %>").click(function() {
        //code here
    });
    

    更改您的复选框类
    CssClass="restricted"
    

    class="restricted"
    

    【讨论】:

    • 谢谢,但这并不能解决任何问题。在 IE 中仍然有效,但在 Chrome/Firefox 中无效。
    • 您可以尝试删除 clientidmode=static 并尝试像上面那样选择吗?
    • 仍然没有骰子。将 CssClass 更改为 class 后,它在 IE 中仍然有效,但在其他两个中无效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-14
    • 1970-01-01
    • 2015-04-27
    • 1970-01-01
    • 2016-11-02
    • 2023-04-07
    相关资源
    最近更新 更多