AutoPostBack,点击选择

时间:2014-04-18 10:34:26

标签: javascript html asp.net css

我在select中有3个form个输入,表示日期。一个是白天,一个是月,一个是年。

使用javascript添加这些选项的选项:例如,如果选择的年份可以除以4而月份是2月那么那天将有29天selecet否则会有只有28.-这是有效的,我不知道它是否与问题有关所以无论如何我带来了它。

现在,如果您想输入一个以年份和月份开头的日期,那么代码将知道要添加到当天select的天数。

因此我在此使用了asp.net,并且每当在月份和年份之前选择selecet时,会有一个<td id="dateE">变为可见且在其中写入第一个月和一年。

问题它不起作用 - 当您在年份select之前点击select时没有任何反应 - 没有错误,网站没有失败或任何事情。

此选项包含runat=serverautopostback=true,我尝试onclick onserverclick onfocus <body onload ="addDate()"> <form id="form1" runat="server"> <table> <tr><td> Birth Date: <br /> <select id="Day" name="Day" class="regis" style="width:109px" onfocus="Day_Click" runat="server" autopostback="true"> <option value="" selected="selected">Day</option> </select> / <select id="Month" name="Month" class="regis" onchange="updateDay()" style="width:109px"> <option value="" selected="selected">Month</option> </select> / <select id="Year" name="Year" class="regis" onchange="yearChanged()" style="width:109px"> <option value="" selected="selected" >Year</option> </select> </td> <td class="un" id="dateE" runat="server"></td> </tr> </table> </form> </body> 无效。

这里是代码:

HTML:

    .un
    {
        display:none;  
    }
    .feedback
    {
        border-top:1px solid black;
        border-left:1px solid black;
        vertical-align:bottom;
    }
.regis
{
   border: 1px solid rgba(190, 190, 190, 0.9);
   background-color: #fff;
   background: transparent;
   height:25px;
}

的CSS:

    function addYear() {
    var currentYear = new Date().getFullYear();
    var legalWorkingAge = currentYear - 16;
    var select = document.getElementById("Year");
    for (var i = legalWorkingAge; i >= 1900; i--) {
        var option = document.createElement('option');
        option.text = option.value = i;
        select.add(option, 0);
    } //for
} //addYear
function addMonth() {
    var select = document.getElementById("Month");
    for (var i = 1; i <= 12; i++) {
        var option = document.createElement('option');
        option.text = option.value = i;
        select.add(option, 0);
    } //for
} //addMonth
function addDay(month) {
    var select = document.getElementById("Day");
    while (select.options.length != 1) {
        select.options.remove(1);
    }
    var daynum;
    switch (parseInt(month)) {
        case 1: daynum = 31;
            break;
        case 2:
            var year = document.getElementById("Year");
            var selectedYear = year.options[year.selectedIndex].value;
            if (parseInt(selectedYear) % 4 == 0)
                daynum = 29;
            else
                daynum = 28;
            break;
        case 3: daynum = 31;
            break;
        case 4: daynum = 30;
            break;
        case 5: daynum = 31;
            break;
        case 6: daynum = 30;
            break;
        case 7: daynum = 31;
            break;
        case 8: daynum = 31;
            break;
        case 9: daynum = 30;
            break;
        case 10: daynum = 31;
            break;
        case 11: daynum = 30;
            break;
        case 12: daynum = 31;
            break;
    } //switch
    for (var i = 1; i <= daynum; i++) {
        var option = document.createElement('option');
        option.text = option.value = i;
        select.add(option, 0);
    } //for
} //addDay

function addDate() {
    addMonth();
    addYear();
} //addDate
function updateDay() {
    var month = document.getElementById("Month");
    var selectedMonth = month.options[month.selectedIndex].value;
    addDay(selectedMonth);
}
function yearChanged() {
    var month = document.getElementById("Month");
    var selectedMonth = month.options[month.selectedIndex].value;
    if (selectedMonth != "")
        updateDay()
}

的javascript:

public void Day_Click(object sender, EventArgs e)
{
    this.dateE.InnerText = "Enter a Month and a Year First";
    this.dateE.Attributes.Add("class", "feedback");
}

asp.net:

{{1}}

它让我变得愚蠢,我已经看了很多次问题,而我却找不到它。

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

您正在使用来自HtmlControls命名空间的控件 - 这使得所有内容变得复杂。

首先,对于这些控件,您可能使用的大多数事件(如onclickonfocus等)都是客户端的常规HTML标记。因此,它们甚至不会触发回发到服务器,更不用说验证和服务器端事件处理程序了。

不同的HtmlControl个继承者定义了不同的服务器端事件,以便至少可以与服务器进行一些交互。其中一些根本没有任何内容,但您使用的select已定义OnServerChange。这是唯一可用于在服务器上跟踪控件发生的事情。

当然,您仍然可以使用类似onfocusonclick的客户端,但这意味着编写手动触发回发的客户端处理程序。可能,但有点棘手。

另一个需要考虑的好选择是使用asp:DropDownList控件,该控件呈现为select,但在服务器上使用会更方便。

最后,您尝试做的事情似乎更适合完全客户端解决方案。那就是你应该能够通过javascript轻松控制对选择的可见性/访问。你有没有考虑过这种方法?