jQuery的使用ASP.NET的WebForms - 禁用文本框(jQuery with ASP

2019-08-02 00:54发布

另一个jQuery的noob问题 - 我在做什么错?

我有ASP.NET 3.5 Web表单看起来像这样渲染一些HTML标记:

<input id="ctl01_cphContent_pnlBasicInfo_chkRC" 
       type="checkbox" name="ctl01$cphContent$pnlBasicInfo$chkRC" />
<label for="ctl01_cphContent_cntPromos_pnlBasicInfo_chkRC">Recurrent Charges</label>

<span id="ctl01_cphContent_cntPromos_pnlBasicInfo_lblPromoValidFor" 
      class="rcPromo">Validity:</span>

<span class="rcPromo">
   <input id="ctl01_cphContent_pnlBasicInfo_rbnDiscountValidFor" 
          type="radio" name="ctl01$cphContent$pnlBasicInfo$discountValidFor" 
          value="rbnDiscountValidFor" checked="checked" />
   <label for="ctl01_cphContent_cntPromos_pnlBasicInfo_rbnDiscountValidFor">valid for</label>
</span>
<span class="rcPromo">
   <input id="ctl01_cphContent_pnlBasicInfo_rbnDiscountValidUntil" 
          type="radio" name="ctl01$cphContent$pnlBasicInfo$discountValidFor" 
          value="rbnDiscountValidUntil" />
   <label for="ctl01_cphContent_cntPromos_pnlBasicInfo_rbnDiscountValidUntil">valid until</label>
</span>

<input name="ctl01$cphContent$pnlBasicInfo$txtDiscountMonths" type="text"
       id="ctl01_cphContent_pnlBasicInfo_txtDiscountMonths" 
       class="textbox" class="rcPromo" originalValue="" style="width:30px;" />
<span id="ctl01_cphContent_cntPromos_pnlBasicInfo_lblMonths" class="rcPromo"></span>

<input name="ctl01$cphContent$pnlBasicInfo$txtDiscountUntil" type="text" 
       id="ctl01_cphContent_pnlBasicInfo_txtDiscountUntil" 
       class="textbox" class="rcPromo" originalValue="" style="width:150px;" />
  • 我有一个检查“chkRC”我想陷阱,并用它来启用/禁用其他UI控件
  • 我有一个数量的标签,输入(类型=无线电)和输入(类型=文本)UI控件。 这些都标有“rcPromo”虚拟CSS类
  • 我有一个名为“文本框”,为正常的文本框和“textboxDisabled”为文本框的禁用状态,在一个外部引用CSS文件中的CSS类,这项工作确定(在服务器端代码中使用时,这是)

我试图在jQuery来做到这一点是:当“chkRC”复选框被禁用,我想禁用所有相关的UI控件。

我的jQuery看起来是这样的:

    $(document).ready(function() {
        $("#<%= chkRC.ClientID %>").click(function() {
            $('.rcPromo > :label').toggleClass('dimmed');

            if (this.checked) {
                $('.rcPromo').removeAttr('disabled');
                $('.rcPromo .textboxDisabled').addClass('textbox').removeClass('textboxDisabled');
            }
            else {
                $('.rcPromo > :input').removeAttr('checked');
                $('.rcPromo .textbox').addClass('textboxDisabled').removeClass('textbox');
                $('.rcPromo').attr('disabled', true);
            }
        });
    });

它工作正常的标签和单选按钮 - 但我不能让它使用文本框的工作 - 他们只是停留各地一样,没有什么变化(他们没有得到禁止,他们没有自己的外貌改变表明他们是残疾人,要么)。

我不明白这一点-我看到几个(几比样品更多)文本框,这是<input type="text">在HTML中,他们确实有class="rcPromo"class="textbox"他们-那么,为什么不jQuery的查找和更新这些?

有任何想法吗?

Answer 1:

我不能想办法来补充从皮肤文件分配到控制CSS类名(凤凰是正确的,类名需要在相同的属性添加)。

我虽然可以想一些变通办法:

- >你可以用你想要在一个给定的类股利禁用的文本框:

<div class="disable_textbox"><asp:textbox id="".../></div>

然后选择禁用它们:

$('.disable_textbox input').attr('disabled', true);

- >您可以在您希望禁用的文本框的ID字符串:

<asp:textbox id="txtDiscountUntil_DisableMe" ... />

然后像这样禁用它们:

$("input[id*='DisableMe']").attr('disabled', true);

- >您可以将自定义属性添加到您的文本框:

txtDiscountUntil.Attributes.Add("disableme", "true");

然后像这样禁用它们:

$("input[disableme='true']").attr('disabled', true);


Answer 2:

你的HTML标记不正确的。

您不能添加两个类像一个在你的代码。

两节课可以添加这样

<input type="text" class="Class1 Class2" />

而不是像

<input type="text" class="Class1" class="Class2" />

你为什么不使用hasClass检查元素是否有此类设置或不?

我认为你必须给这两个类OR条件。



文章来源: jQuery with ASP.NET WebForms - disabling textboxes