I'm having this issue where I need to enable datepicker function on asp:textbox after I'm changing my asp:dropdownlist choice over certain index.

This is my asp:dropdownlist control where I did assign the value from code behind programmatically :

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

But here is the example how it will looks like later :

            <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>

I did re-set the javascript function on my asp:dropdownlist control on my code behind :

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

This my asp:textboxt control which supposed to get datepicker function enabled on it once I choose the item in my dropdownlist, currently the datepicker function will only enabled through it CssClass if the value is "watermarkText", it need to be change to "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" />

This is the script I use :

    <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>

My script will keep running & prompt alert "Failed" no matter what is the choice. It suppose to have datepicker icon on the right of my asp:textbox but it won't.

Can someone point me into a right direction to achieve this?

UPDATED :

I manage to change the classname for asp:textbox now by changing ddlID into parseInt(dllID) but still unable to get the datepicker icon visible

UPDATED : 18-January-2013 ~ Adding real code (related only)

OK guys, here is the code which I already trim for this issue only, hope it can get you to check on it :

    .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>

Here is my code behind, also trimmed for this question only :

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();");

}
}

Sorry it might bit different from before now, just adding some test only. Thanks guy for your help. Here what it looks like :

Interface of my program

有帮助吗?

解决方案

I think I close to what I'm looking for now. I did some changes & now I can get the datepicker automatically popup! See my updated script below : * need to adjust a bit on the date format later to "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>

See picture below :

picture of success

*** Thanks a lot stackoverflow & all members!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top