0

我遇到了这个问题,在我更改我的 asp:dropdownlist 选项后,我需要在 asp:textbox 上启用 datepicker 功能。

这是我的 asp:dropdownlist 控件,我在其中以编程方式从后面的代码中分配了值:

<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 控件,一旦我在下拉列表中选择项目,它应该启用 datepicker 功能,目前 datepicker 功能只有在值为“watermarkText”时才会通过它 CssClass 启用,它需要更改为“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:textbox 右侧有 datepicker 图标,但它不会。

有人可以指出我实现这一目标的正确方向吗?

更新 :

我现在设法通过将 ddlID 更改为 parseInt(dllID) 来更改 asp:textbox 的类名,但仍然无法使日期选择器图标可见

更新:2013 年 1 月 18 日 ~ 添加真实代码(仅相关)

好的,这里是我已经为这个问题修剪的代码,希望它可以让你检查它:

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

}
}

抱歉,它可能与以前有点不同,只是添加了一些测试。谢谢你的帮助。这是它的样子:

我的程序界面

4

1 回答 1

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>

见下图:

成功的图片

*** 非常感谢 stackoverflow 和所有成员!

于 2013-01-18T04:50:44.107 回答