我遇到了这个问题,在我更改我的 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();");
}
}
抱歉,它可能与以前有点不同,只是添加了一些测试。谢谢你的帮助。这是它的样子: