2013-01-17 108 views
0

我遇到了此問題,因爲我需要在asp:textbox上啓用datepicker功能,因爲我在某些索引上更改了我的asp:dropdownlist選項。我的下拉列表索引更改後無法更改CssClass

這是我的ASP:這裏我沒有落後程序分配從碼值下拉列表控制:

<asp:DropDownList ID="ddlHORating" runat="server" CssClass="ctlControl" /> 

但這裏是例如它怎麼會看起來更高版本:

  <asp:DropDownList ID="ddlHORating" runat="server" CssClass="ctlControl"> 
       <asp:ListItem Value="OK" Text="6" /> 
       <asp:ListItem Value="OK" Text="5" /> 
       <asp:ListItem Value="OK" Text="4" /> 
       <asp:ListItem Value="OK" Text="3" /> 
       <asp:ListItem Value="WORST" Text="2" /> 
       <asp:ListItem Value="WORST" Text="1" /> 
       <asp:ListItem Value="WORST" Text="0" /> 
      </asp:DropDownList> 

我做在我的代碼後面重新設置我的asp:dropdownlist控件上的javascript函數:

ddlHORating.Attributes.Add("onchange", "JavaScript: ICRESDateEnabler();"); 

這是我的asp:這應該得到它的啓用一次我在下拉列表中選擇該項目日期選擇器功能textboxt控制,目前的日期選擇器功能將只啓用了通過它的CssClass如果值是「watermarkText」,就必須改變「 watermarkDate」:

<asp:TextBox ID="txtICRESRevDate" runat="server" CssClass="watermarkText" Text="Select a date from calendar button only" Tooltip="Select a date from calendar button only" /> 

這是我使用的腳本:

<script type="text/javascript"> 
    $(document).ready(function ICRESDateEnabler() { 
     var ddl = document.getElementById('<%= ddlHORating.ClientID %>'); 
     var ddlID = ddl.selectedIndex; 
     alert("Selected Index is : " + ddl.selectedIndex); 
     if (parseInt(ddlID) >= 4) { 
      document.getElementById('<%= txtICRESRevDate.ClientID %>').className = "watermarkText"; 
      alert("It's working");//Testing 
     } 
     else { 
      document.getElementById('<%= txtICRESRevDate.ClientID %>').className = "watermarkDate"; 
      alert("Failed!");//Testing 
     } 
    }); 
</script> 

我的腳本將繼續運行&提示警報‘失敗’不管是選擇。 它假設我的asp:文本框的右側有datepicker圖標,但它不會。

有人可以指出我正確的方向來實現這一目標嗎?

更新:

我設法改變ASP類名:通過改變ddlID到parseInt函數(dllID),但文本框現在還無法獲得日期選擇器圖標可見

更新時間:1月18日2013〜添加真正的代碼(僅適用於相關的)

OK傢伙,這裏是我已經修剪只有這個問題的代碼,希望它可以讓你檢查它:

.body 
    { 
     width: 1100px; 
     table-layout: auto; 
     border-style: none; 
     border-width: 1pt; 
     vertical-align: central; 
     background-color: white !important; 
     font-family:verdana,arial,helvetica,sans-serif; 
     color:#000000; 
    } 

    .lblDesc 
    { 
     color: #ed1b24; 
     font-size: 14pt !important; 
     border-bottom-width: 1px; 
     border-bottom-style: solid; 
     border-bottom-color: #fabea6; 
     padding-left: 5px; 
    } 

    .tblBody 
    { 
     width: 100%; 
     table-layout: auto; 
     border-style: none; 
     border-width: 1pt; 
     vertical-align: central; 
    } 

    .trRow 
    { 
     height: 35px !important; 
     text-align: left !important; 
     background-repeat: no-repeat; 
    } 

    .tdLabel 
    { 
     font-size: 8pt; 
     font-weight: bold; 
     color: #525252; 
     padding-left: 10px; 
    } 

    .tdControl 
    { 
     border-color: inherit; 
     border-width: 1px; 
     width : 35%; 
     border-style: none; 
     background-color: rgb(249, 249, 249); 
     margin-left: 40px; 
    } 

    .tdButton 
    { 
     text-align: right !important; 
     padding-right: 40px; 
    } 

    .ctlButton 
    { 
     border-style: solid; 
     border-top-style: solid; 
     border: 1px; 
     width: 120px; 
    } 

    .ctlControl 
    { 
     width: 89%; 
     padding-left: 5px; 
    } 

    .tdSplitter 
    { 
     width: 2%; 
     border-style: none; 
    } 

    .watermarkDate 
    { 
     color:#999; 
     width: 89%; 
     padding-left: 5px; 
     font-style:italic; 
     font-family:verdana,arial,helvetica,sans-serif; 
    } 

    .watermarkText 
    { 
     color:#999; 
     width: 89%; 
     padding-left: 5px; 
     font-style: italic; 
     font-family:verdana,arial,helvetica,sans-serif; 
    } 

    .currenciesOnly 
    { 
     color:#999; 
     text-align: left; 
     width: 89%; 
     padding-left: 5px; 
     font-style: italic; 
    } 

    .numeric 
    { 
     color:#999; 
     width: 89%; 
     padding-left: 5px; 
     font-style: italic; 
    } 
</style> 
<script type="text/javascript" src="~/_layouts/script/jquery-1.8.2.js"></script> 
<script type="text/javascript" src="~/_layouts/script/jquery-ui.js"></script> 
<script type="text/javascript" src="~/_layouts/script/jquery.ui.widget.js"></script> 
<script type="text/javascript" src="~/_layouts/script/ui/jquery.ui.core.js"></script> 
<script type="text/javascript" src="~/_layouts/script/jquery.autocomplete.js"></script> 
<script type="text/javascript" src="~/_layouts/script/jquery.ui.datepicker.js"></script> 
<script type="text/javascript" src="~/_layouts/script/jquery-currency.js"></script> 
<script type="text/javascript" src="~/_layouts/script/jquery.numeric.js"></script> 
<script type="text/javascript" src="~/_layouts/script/moment.js"></script> 
<script type="text/javascript"> 
    $(function() { 
     $(".watermarkDate").each(function() { 
      $txt = $(this).datepicker({ 
       showOn: "button", 
       buttonImage: "_layouts/EAR/images/Calendar.png", 
       buttonImageOnly: true, 
       dateFormat: "dd-MM-yy", 
       showButtonPanel: true, 
       onClose: function (e) { 
        var ev = window.event; 
        if (ev.srcElement.innerHTML == 'Clear') 
         this.value = "Select a date from calendar button only"; 
       }, 
       closeText: "Clear", 
       buttonText: "" 
      }); 
      $txt.addClass("watermarkDate"); 
      CalculateDay(); 
     }); 
     $(".watermarkDate").focus(function() { 
      $txt = $(this).datepicker({ 
       showOn: "button", 
       buttonImage: "_layouts/EAR/images/Calendar.png", 
       buttonImageOnly: true, 
       dateFormat: "dd-MM-yy", 
       showButtonPanel: true, 
       onClose: function (e) { 
        var ev = window.event; 
        if (ev.srcElement.innerHTML == 'Clear') 
         this.value = "Select a date from calendar button only"; 
       }, 
       closeText: "Clear", 
       buttonText: "" 
      }); 
      $txt.addClass("watermarkDate"); 
      CalculateDay(); 
     }); 
     $(".watermarkDate").blur(function() { 
      $txt = $(this).datepicker({ 
       showOn: "button", 
       buttonImage: "_layouts/EAR/images/Calendar.png", 
       buttonImageOnly: true, 
       dateFormat: "dd-MM-yy", 
       showButtonPanel: true, 
       onClose: function (e) { 
        var ev = window.event; 
        if (ev.srcElement.innerHTML == 'Clear') 
         this.value = "Select a date from calendar button only"; 
       }, 
       closeText: "Clear", 
       buttonText: "" 
      }); 
      $txt.addClass("watermarkDate"); 
      CalculateDay(); 
     }); 
    }); 
</script> 
<script type="text/javascript"> 
    $(function() { 
     $(".watermarkText").each(function() { 
      $txt = $(this); 
      if ($txt.val() != this.title) { 
       $txt.removeClass("watermark"); 
      } 
     }); 
     $(".watermarkText").focus(function() { 
      $txt = $(this); 
      if ($txt.val() == this.title) { 
       $txt.val(""); 
       $txt.removeClass("watermark"); 
      } 
     }); 
     $(".watermarkText").blur(function() { 
      $txt = $(this); 
      if ($.trim($txt.val()) == "") { 
       $txt.val(this.title); 
       $txt.addClass("watermark"); 
      } 
     }); 
    }); 
</script> 
<script type="text/javascript"> 
    $(document).ready(function() { 
     $(".numeric").numeric(false, function() { 
      alert("Integers only"); 
      this.value = "0 month"; 
      this.focus(); 
     }); 
    }); 
</script> 
<script type="text/javascript"> 
    $(document).ready(function CalculateDay() { 
     var m, n, d, e, f, months, dtCurrDate, dtCurrDate_unixtime, ctlHORevDate, ctlCasLineExpDate, ctlMonthOverDue, newHORevDate, newCasLineExpDate, newMonthOverDue, newHORevDate_unixtime, newCasLineExpDate_unixtime, newMonthOverDue_unixtime, diffCountDayHORevDate, diffCasLineExpDate, diffCountDayMonthOverDue; 
     var months = new Array(12); 
     months[0] = "January"; 
     months[1] = "February"; 
     months[2] = "March"; 
     months[3] = "April"; 
     months[4] = "May"; 
     months[5] = "June"; 
     months[6] = "July"; 
     months[7] = "August"; 
     months[8] = "September"; 
     months[9] = "October"; 
     months[10] = "November"; 
     months[11] = "December"; 

     ctlHORevDate = document.getElementById('<%= txtHORevDate.ClientID %>').value; 
     ctlCasLineExpDate = document.getElementById('<%= txtCasLineExpDate.ClientID %>').value; 

     if (ctlCasLineExpDate != "Select a date from calendar button only") { 
      ctlCasLineExpDate = ctlCasLineExpDate.split('-'); 
      var i = 0; 
      while (i <= 12) { 
       if (ctlCasLineExpDate[1] == months[i]) 
        ctlCasLineExpDate[1] = i + 1; 
       i++; 
      } 

      f = moment(new Date(ctlCasLineExpDate[2], ctlCasLineExpDate[1] - 1, ctlCasLineExpDate[0])).subtract('months', 4).format("DD-MMMM-YYYY"); 

      document.getElementById('<%= txt4MontBefExpDate.ClientID %>').value = f;//Get date 4 month before Cash Line Expiry Date 
     } 

     if (ctlHORevDate != "Select a date from calendar button only") { 
      ctlHORevDate = ctlHORevDate.split('-'); 
      var i = 0; 
      while (i <= 12) { 
       if (ctlHORevDate[1] == months[i]) 
        ctlHORevDate[1] = i + 1; 
       i++; 
      } 

      newHORevDate = ctlHORevDate[2] + "-" + ctlHORevDate[1] + "-" + ctlHORevDate[0]; 
      newHORevDate = newHORevDate.split('-'); 

      d = new Date(newHORevDate[0], (newHORevDate[1] - 1), newHORevDate[2]); 
      e = moment().format('YYYY-MM-DD'); 
      e = e.split('-'); 
      e = new Date(e[0], (e[1] - 1), e[2]); 

      m = d.getMonth(); 
      n = e.getMonth(); 

      months = (e.getMonth() + 1) - d.getMonth() + (12 * (e.getFullYear() - d.getFullYear())); 

      document.getElementById('<%= txtMonthOverDue.ClientID %>').value = months + " month";//Get month overdue 
     } 
    }); 
</script> 
<script type="text/javascript"> 
    $(document).ready(function ICRESDateEnabler() { 
     var ddl = document.getElementById('<%= ddlHORating.ClientID %>'); 
     var ddlID = ddl.selectedIndex; 
     alert("Selected Index is : " + ddl.selectedIndex + "\nAnd it's really : " + ddlID + "\nAfter convert to int is : " + parseInt(ddlID));//Testing 
     if (parseInt(ddlID) <= 26) { 
      document.getElementById('<%= txtICRESRevDate.ClientID %>').className = "watermarkText"; 
      alert("It's working, ICRES rating is below 13E & class is : \n" + document.getElementById('<%= txtICRESRevDate.ClientID %>').className);//Testing 
     } 
     else { 
      document.getElementById('<%= txtICRESRevDate.ClientID %>').className = "watermarkDate"; 
      alert("It's working!, ICRES rating is 13E above & class is : \n" + document.getElementById('<%= txtICRESRevDate.ClientID %>').className);//Testing 
     } 
    }); 
</script> 
</head> 
<body> 
<table ID="tblBody" class="body"> 
    <tr ID="tr04" class="trRow"> 
     <td class="tdSplitter"> 
        </td> 
     <td class="tdLabel">Business Centre</td> 
     <td class="tdControl"> 
      <asp:DropDownList ID="ddlBusinessCentre" runat="server" CssClass="ctlControl" /> 
     </td> 
     <td class="tdSplitter"> 
        </td> 
     <td class="tdLabel">Rating</td> 
     <td class="tdControl"> 
      <asp:DropDownList ID="ddlHORating" runat="server" AutoPostBack="true" CssClass="ctlControl" /> 
     </td> 
     <td class="tdSplitter"> 
        </td> 
    </tr> 
    <tr ID="tr05" class="trRow"> 
     <td class="tdSplitter"> 
        </td> 
     <td class="tdLabel">Zone</td> 
     <td class="tdControl"> 
      <asp:DropDownList ID="ddlZone" runat="server" CssClass="ctlControl"> 
       <asp:ListItem Enabled="true" Text="Please select..." Selected="True" /> 
       <asp:ListItem Enabled="true" Value="0" Text="Zone 1" /> 
       <asp:ListItem Enabled="true" Value="1" Text="Zone 2" /> 
       <asp:ListItem Enabled="true" Value="2" Text="Zone 3" /> 
      </asp:DropDownList> 
     </td> 
     <td class="tdSplitter"> 
        </td> 
     <td class="tdLabel">ICRES 13A Or Worse (New Review Date)</td> 
     <td class="tdControl"> 
      <asp:TextBox ID="txtICRESRevDate" runat="server" CssClass="watermarkText" Text="Select a date from calendar button only" Tooltip="Select a date from calendar button only" /> 
     </td> 
     <td class="tdSplitter"> 
     </td> 
    </tr> 
</table> 

這裏是我的代碼背後,也修剪只有這樣一個問題:

protected void Page_Load(object sender, EventArgs e) 
{ 
    SetAttribute(); 
} 

protected void Page_Init() 
{ 
    LoadRatingList(); 
} 

public void LoadRatingList() 
{ 
    try 
    { 
     using (SPSite spSite = SPContext.Current.Site) 
     { 
      using (SPWeb spWeb = spSite.OpenWeb()) 
      { 
       SPList spListOpen = spWeb.Lists["Rating"]; 

       SPQuery spQuery = new SPQuery(); 

       spQuery.Query = "<Where><Eq><FieldRef Name='Activator' /><Value Type='Boolean'>1</Value></Eq></Where>"; 
       SPListItemCollection spItemCollection = spListOpen.GetItems(spQuery); 

       if (!spItemCollection.Count.Equals(0)) 
       { 
        ddlHORating.Items.Add("Please select..."); 
        ddlHORating.SelectedItem.Attributes.CssStyle.Add("color", "Red"); 
        int i = 0; 
        foreach (SPListItem spItem in spItemCollection) 
        { 
         string statAct = spItem["Activator"].ToString(); 
         string statVal = spItem["Title"].ToString(); 

         if (statAct.Equals("True")) 
         { 
          ddlHORating.Visible = true; 
          ddlHORating.Items.Add(spItem["Title"].ToString()); 
          i++; 
          ddlHORating.SelectedValue = null; 
         } 
        } 
       } 
       else 
       { 
        ddlHORating.BackColor = System.Drawing.Color.Red; 
        Page.ClientScript.RegisterStartupScript(this.GetType(), "Alert", "alert('Data not available in Rating dropdown list!');", true); 
       } 
      } 
     } 
    } 
    catch (Exception ex) 
    { 
     Page.ClientScript.RegisterStartupScript(this.GetType(), "Alert", "alert('Error at populate Rating value : " + ex.Message + "');", true); 
    } 
} 

public void SetAttribute() 
{ 
    ddlHORating.Attributes.Add("onchange", "JavaScript: ICRESDateEnabler();"); 

} 
} 

對不起它可能從現在纔有點不同,僅僅只增加了一些測試。謝謝你的幫助。這裏是什麼樣子:

Interface of my program

+0

函數沒有理由在'$(document).ready'塊中。 – jbabey

+0

我確實嘗試了你的建議,但沒有什麼不同,有什麼想法? – mutanic

+0

alert(「Selected Index is:」+ ddl.selectedIndex);'? – jbabey

回答

0

我想我接近我正在尋找現在。 我做了一些變化&現在我可以得到自動日期選擇器彈出! 見下面我的更新腳本:*以後需要調整的日期格式有點 「DD-MMMM-YYYY」

<script type="text/javascript"> 
    $(document).ready(function ICRESDateEnabler() { 
     var ddl = document.getElementById('<%= ddlHORating.ClientID %>'); 
     var ddlID = ddl.selectedIndex; 
     alert("Selected Index is : " + ddl.selectedIndex + "\nAnd it's really : " + ddlID + "\nAfter convert to int is : " + parseInt(ddlID)); 
     if (parseInt(ddlID) <= 26) { 
      document.getElementById('<%= txtICRESRevDate.ClientID %>').className = "watermarkText"; 
      alert("It's working, ICRES rating is below 13E & class is : \n" + document.getElementById('<%= txtICRESRevDate.ClientID %>').className);//Testing 
      $(document.getElementById('<%= txtICRESRevDate.ClientID %>')).value = "Select a date from calendar button only"; 
     } 
     else { 
      document.getElementById('<%= txtICRESRevDate.ClientID %>').className = "watermarkDate"; 
      alert("It's working!, ICRES rating is 13E above & class is : \n" + document.getElementById('<%= txtICRESRevDate.ClientID %>').className);//Testing 
      $(document.getElementById('<%= txtICRESRevDate.ClientID %>')).datepicker().datepicker("show"); 
     } 
    }); 
</script> 
下面

見圖片:

picture of success

***謝謝很多stackoverflow &所有成員!