另一个jQuery noob问题 - 我做错了什么?
我有一些由ASP.NET 3.5 webforms呈现的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;" />
我想在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);
}
});
});
它适用于标签和无线电按钮 - 但我无法让它与文本框一起工作 - 它们只是保持相同,没有任何变化(它们不会被禁用而且它们不会改变他们的外表表明他们也被禁用了。
我不明白这一点 - 我确实看到了几个(比示例中的更多)文本框,它们是HTML中的<input type="text">
,并且它们确实有class="rcPromo"
和{{1}在他们身上 - 那么为什么jQuery不能找到并更新它们呢?
有什么想法吗?
马克
答案 0 :(得分:1)
您的HTML标记不正确。
您无法添加两个类,例如代码中的类。
可以像这样添加两个类
<input type="text" class="Class1 Class2" />
而不喜欢
<input type="text" class="Class1" class="Class2" />
为什么不使用hasClass检查元素是否设置了此类?
我认为你必须在这两个类的OR条件下给它。
答案 1 :(得分:1)
我想不出一种方法可以增加从皮肤文件中赋予控件的css类名称(凤凰是正确的,类名需要添加到同一属性中)。
我可以想到一些解决方法:
- &GT;您可以在具有给定类的div中包含要禁用的所有文本框:
<div class="disable_textbox"><asp:textbox id="".../></div>
然后选择以下选项禁用它们:
$('.disable_textbox input').attr('disabled', true);
- &GT;您可以在要禁用的文本框的ID中包含字符串:
<asp:textbox id="txtDiscountUntil_DisableMe" ... />
然后像这样禁用它们:
$("input[id*='DisableMe']").attr('disabled', true);
- &GT;您可以在文本框中添加自定义属性:
txtDiscountUntil.Attributes.Add("disableme", "true");
然后像这样禁用它们:
$("input[disableme='true']").attr('disabled', true);