2009-09-02 42 views
0

我有一個DropDownList作爲插入到我的主頁上的彈出窗口內的子窗體中的自定義控件。我爲DropDownList和我試圖啓用/禁用的文本框編寫了唯一的CssClass標識符。我只希望爲DropDownList值317和318啓用文本框,其他所有人都應禁用該文本框。這是問題......如果我彈出我的彈出窗口並選擇317/318以外的其他操作,它會按預期禁用文本框。然後,如果我改變主意並選擇317或318,它不會啓用文本框。這似乎真的很奇怪,它部分工作。JQuery啓用,禁用文本框不一致工作

我在我的主網頁下面的jQuery代碼:

<script language="javascript" type="text/javascript"> 

    var _CASE_RESERVE_ACTION = "317"; 
    var _LEGAL_RESERVE_ACTION = "318"; 

    function pageLoad() { 

     $(".statusActionDDLCssClass").change(function() { 
      var value = $(this).val(); 
      if (value == _CASE_RESERVE_ACTION || value == _LEGAL_RESERVE_ACTION) 
       $(".statusActionAmountCssClass").attr('enabled', 'enabled'); 
      else 
       $(".statusActionAmountCssClass").attr('disabled', 'disabled'); 
     }); 
    } 

</script> 

下面是DropDownList的自定義控件:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="StStatusActionLookup.ascx.cs" Inherits="Company.Solutions.Web.Controls.StStatusActionLookup" %> 

<div id="mainControlContainer" style="width:99%; padding:8px;"> 

    <div id="comboContainer" style="float:left; padding-top:12px;padding-left:5px; padding-right:5px; padding-bottom:3px;"> 
     <asp:UpdatePanel ID="update1" runat="server" UpdateMode="Always"> 
      <Triggers> 
       <asp:AsyncPostBackTrigger ControlID="chkComments" EventName="CheckedChanged" /> 
       <asp:AsyncPostBackTrigger ControlID="chkDenials" EventName="CheckedChanged" /> 
       <asp:AsyncPostBackTrigger ControlID="chkOther" EventName="CheckedChanged" /> 
      </Triggers> 
      <ContentTemplate> 
       <asp:DropDownList runat="server" ID="ddlLookup" width="240px" CssClass="statusActionDDLCssClass" /> 
      </ContentTemplate> 
     </asp:UpdatePanel> 

    </div> 
    <div id="filterContainer" style="text-align:left;padding-left:6px;width:275px"> 
     <fieldset style="width:260;"> 
      <legend>Filters</legend> 
      <asp:CheckBox ID="chkComments" runat="server" Text="Comments" AutoPostBack="true" /> 
      <asp:CheckBox ID="chkDenials" runat="server" Text="Denials" AutoPostBack="true" /> 
      <asp:CheckBox ID="chkOther" runat="server" Text="Other" AutoPostBack="true" /> 
     </fieldset> 

    </div>  
</div> 

這裏是我的子窗體與文本框(txtStatusActionAmount) :

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="StatusActionAddSubform.ascx.cs" 
Inherits="Company.Solutions.Web.Controls.StatusActionAddSubform" %> 
<%@ Register TagPrefix="st" TagName="StatusActionLookup" Src="~/Controls/StStatusActionLookup.ascx" %> 
<div class="NinetyNinePercentWide"> 
    <div class="NinetyNinePercentWide EightPixelBottomMargin"> 
     <div class="RowHeader" style="padding-top: 20px;"> 
      <span>Action:</span> 
     </div> 
     <div> 
      <xy:StatusActionLookup ID="statusActionLookup1" runat="server" /> 
     </div> 
    </div> 
    <div class="NinetyNinePercentWide EightPixelBottomMargin"> 
     <div class="quarterWidthDiv"> 
      <span>New Status:</span> 
      <asp:Literal runat="server" Text="&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" ID="spc2" /> 
      <asp:DropDownList runat="server" ID="ddlNewStatus"> 
       <asp:ListItem Selected="True" Value="" Text="" /> 
       <asp:ListItem Value="01" Text="Open" /> 
       <asp:ListItem Value="02" Text="Closed" /> 
      </asp:DropDownList> 
     </div> 
     <div class="quarterWidthDiv"> 
      <span>Date:</span> 
      <asp:Literal runat="server" Text="&nbsp;&nbsp" ID="spc1" /> 
      <asp:TextBox ID="txtStatusActionDate" runat="server" Columns="10" MaxLength="10" 
      Style="width: 35%;" CssClass="statusActionDate" /> 
      <cc1:CalendarExtender ID="txtStatusActionDate_CalendarExtender" runat="server" Enabled="True" 
      TargetControlID="txtStatusActionDate" /> 
      <cc1:MaskedEditExtender runat="server" ID="txtStatusActionDate_MaskedEditExtender" 
      Enabled="True" Mask="99/99/9999" MaskType="Date" TargetControlID="txtStatusActionDate" 
      UserDateFormat="MonthDayYear" /> 
      <asp:CompareValidator ID="CompareValidator1" runat="server" ControlToValidate="txtStatusActionDate" 
      Type="Date" Operator="DataTypeCheck" ErrorMessage="Invalid Date" >  </asp:CompareValidator>   
     </div> 
     <div class="quarterWidthDiv"> 
     <asp:Label runat="server" ID="lblStatusActionAmount" AssociatedControlID="txtStatusActionAmount" 
      Text="Amount:" /> 
      <asp:TextBox ID="txtStatusActionAmount" runat="server" Style="width: 30%;" CssClass="statusActionAmountCssClass" /> 
     </div> 
     <div class="quarterWidthDiv"> 
      <asp:Label runat="server" ID="lblClaimant" AssociatedControlID="ddlClaimant" Text="Claimant:" /> 
      <asp:DropDownList ID="ddlClaimant" runat="server" onchange="mailOrStatusActionTextChanged()"> 
       <asp:ListItem Selected="True" Value="" Text="" /> 
       <asp:ListItem Value="1" Text="Primary" /> 
       <asp:ListItem Value="2" Text="Secondary" /> 
      </asp:DropDownList> 
     </div> 
    </div> 
    <div class="NinetyNinePercentWide EightPixelBottomMargin" style="margin-top: 2px;"> 
     <div class="RowHeader"> 
      <asp:Label runat="server" ID="lblStatusActionReason" AssociatedControlID="txtStatusActionReason" 
      Text="Reason:" /> 
     </div> 
     <div style="padding-left: 12px;"> 
      <asp:TextBox ID="txtStatusActionReason" runat="server" TextMode="MultiLine" Rows="2" 
      MaxLength="25" CssClass="StatusReasonWidth" onchange="mailOrStatusActionTextChanged()" /> 
      <asp:CustomValidator ID="cstmValStatusActionReason" runat="server" ControlToValidate="txtStatusActionReason" 
      ErrorMessage="String is too long" /> 
     </div> 
    </div> 
</div>   

謝謝 吉姆薩瓦尼,GA

+0

我想回答這個問題,但是如果我能看到很好的代碼格式。 – 2009-09-02 05:38:11

回答

4

我不相信有表單元素的「啓用」屬性,嘗試

$(".statusActionAmountCssClass").attr('disabled', false); 

編輯

注意的attr()的意義和用法jQuery的1.6已經改變。雖然上述可能仍然可以工作,確保測試和了解attr()prop()

http://blog.jquery.com/2011/05/03/jquery-16-released/

之間的差異在1.6版本中,我們已經裂開DOM的處理屬性 和DOM屬性到單獨的方法。新的.prop()方法設置 或獲取DOM元素的屬性,而.removeProp()刪除 屬性。在過去,jQuery並沒有在 屬性和屬性之間畫出一條清晰的界限。通常,DOM屬性表示從文檔中檢索到的DOM信息的狀態,例如標記中的 值屬性。 DOM 屬性表示文檔的動態狀態;例如,如果用戶點擊上面的輸入元素並鍵入def .prop(「value」)爲abcdef,但.attr(「value」)仍爲abc。

+2

我認爲false的值仍然會觸發它被禁用。 'disabled'屬性需要用'或'去除。removeAttr('disabled')'我認爲'.attr('disabled',null)'也可以。 – 2009-09-02 05:59:28

+0

像一個冠軍!謝謝一堆!如果(value == _CASE_RESERVE_ACTION || value == _LEGAL_RESERVE_ACTION) $(「。statusActionAmountCssClass」)。attr('disabled',false); else $(「。statusActionAmountCssClass」)。attr('disabled',true); – James 2009-09-02 06:01:43

+0

我只在回答之前在firefox中測試過它,它可能需要像Ken Browning所說的所有其他瀏覽器一樣,一定要測試。 – JeremyWeir 2009-09-02 06:05:42

2

$(".statusActionAmountCssClass").attr('disabled', true)將無法​​正常工作

使用:$(".statusActionAmountCssClass").attr('disabled', 'disabled')$(".statusActionAmountCssClass").removeAttr('disabled', 'disabled')

這將工作

0

這是我要做的事。

$("input[name='votingmode']").change(function() { 
if ($("input[name='votingmode']:checked").val() == '1') { 
     $("#plusplus").attr("disabled", "disabled"); 
     $("#minusminus").attr("disabled", "disabled"); 
} else if ($("input[name='votingmode']:checked").val() == '3') { 
     $("#plusplus").removeAttr("disabled", "disabled"); 
     $("#minusminus").removeAttr("disabled", "disabled"); 
});