javascript - 如何解决 DropDownList 更改时的 Javascript 未捕获引用错误?

标签 javascript jquery asp.net

我正在尝试根据下拉列表数据的选择来设置标签文本属性。我有一个存储当前日期的标签控件,我从下拉列表中选择要与当前日期一起添加的天数,并在另一个标签控件中显示新日期。在这样做的同时,我得到了

Uncaught ReferenceError: findDate is not defined.

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="Server">
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript" src="http://cdn.jsdelivr.net/json2/0.1/json2.js"></script>
<script type="text/javascript">
    function findDate() {
    var selectvalid = $("select[id$=ddlvalid]").val();
            if (selectvalid == "Select Validity") {
                alert("Please Select Validity");
            }
            else if (selectvalid == "Upto 7 Days") {

                var today = new Date();
                var tomorrow = new Date(today);
                tomorrow.setDate(today.getDate() + 7);

                var dd = tomorrow.getDate();
                var mm = tomorrow.getMonth() + 1;
                var y = tomorrow.getFullYear();

                var output = tomorrow.getFullYear() + '/' + (mm < 10 ? '0' : '') + mm + '/' + (dd < 10 ? '0' : '') + dd;
                $("span[id$=lblenddt]").text(output);
            }
            else if (selectvalid == "Upto 15 Days") {
                var today = new Date();
                var tomorrow = new Date(today);
                tomorrow.setDate(today.getDate() + 15);


                var dd = tomorrow.getDate();
                var mm = tomorrow.getMonth() + 1;
                var y = tomorrow.getFullYear();

                var output = tomorrow.getFullYear() + '/' + (mm < 10 ? '0' : '') + mm + '/' + (dd < 10 ? '0' : '') + dd;
                document.getElementById("<%=lblenddt.ClientID%>").innerHTML = output;
            }
            else if (selectvalid == "Upto 30 Days") {
                var today = new Date();
                var tomorrow = new Date(today);
                tomorrow.setDate(today.getDate() + 30);

                var dd = tomorrow.getDate();
                var mm = tomorrow.getMonth() + 1;
                var y = tomorrow.getFullYear();

                var output = tomorrow.getFullYear() + '/' + (mm < 10 ? '0' : '') + mm + '/' + (dd < 10 ? '0' : '') + dd;
                document.getElementById("<%=lblenddt.ClientID%>").innerHTML = output;
            }
    };
        window.onload = function() {
            var d = new Date();
            var month = d.getMonth() + 1;
            var day = d.getDate();
            var output = d.getFullYear() + '/' + (month < 10 ? '0' : '') + month + '/' + (day < 10 ? '0' : '') + day;
            document.getElementById("<%=lblenqmdon.ClientID%>").innerHTML = output;
        };
</script>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
<table border="0" cellpadding="0" cellspacing="0">
    <tr>
    <td>Enquiry Made On:</td>
    <td>
        <label id="lblenqmdon" runat="server"></label>
    </td>
    </tr>
    <tr>
    <td>Enquiry Validity:</td>
    <td><asp:DropDownList ID="ddlvalid" runat="server" ClientIDMode="static" onchange="javascript:findDate();">
                                <asp:ListItem>Select Validity</asp:ListItem>
                                <asp:ListItem>Upto 7 Days</asp:ListItem>
                            <asp:ListItem>Upto 15 Days</asp:ListItem>
                            <asp:ListItem>Upto 30 Days</asp:ListItem>
                </asp:DropDownList>
                </td>
    </tr>
    <tr>
    <td>Enquiry Valid Upto:</td>
    <td>
        <label id="lblenddt" runat="server" ClientIDMode="static"></label>
    </td>
    </tr>
</table>
</asp:Content>

请指导我哪里做错了?

最佳答案

只需在您编写的 javascript 中定义一个 findDate 函数 $(function findDate() 将其更改为 function findDate() 您也不需要绑定(bind) onchange 再次在 javascript 代码中,您已经在下拉列表 html onchange="javascript:findDate();"

中绑定(bind)了它
function findDate() {

            var selectvalid = $("#ddlvalid option:selected").text();
            if (selectvalid == "Select Validity") {
                alert("Please Select Validity");
            }
            else if (selectvalid == "Upto 7 Days") {

                var today = new Date();
                var tomorrow = new Date(today);
                tomorrow.setDate(today.getDate() + 7);

                var dd = tomorrow.getDate();
                var mm = tomorrow.getMonth() + 1;
                var y = tomorrow.getFullYear();

                var output = tomorrow.getFullYear() + '/' + (mm < 10 ? '0' : '') + mm + '/' + (dd < 10 ? '0' : '') + dd;
                document.getElementById("<%=lblenddt.ClientID%>").value = output;
            }
            else if (selectvalid == "Upto 15 Days") {
                var today = new Date();
                var tomorrow = new Date(today);
                tomorrow.setDate(today.getDate() + 15);


                var dd = tomorrow.getDate();
                var mm = tomorrow.getMonth() + 1;
                var y = tomorrow.getFullYear();

                var output = tomorrow.getFullYear() + '/' + (mm < 10 ? '0' : '') + mm + '/' + (dd < 10 ? '0' : '') + dd;
                document.getElementById("<%=lblenddt.ClientID%>").innerHTML = output;
            }
            else if (selectvalid == "Upto 30 Days") {
                var today = new Date();
                var tomorrow = new Date(today);
                tomorrow.setDate(today.getDate() + 30);

                var dd = tomorrow.getDate();
                var mm = tomorrow.getMonth() + 1;
                var y = tomorrow.getFullYear();

                var output = tomorrow.getFullYear() + '/' + (mm < 10 ? '0' : '') + mm + '/' + (dd < 10 ? '0' : '') + dd;
                document.getElementById("<%=lblenddt.ClientID%>").innerHTML = output;
            }
      }
        window.onload = function() {
            var d = new Date();
            var month = d.getMonth() + 1;
            var day = d.getDate();
            var output = d.getFullYear() + '/' + (month < 10 ? '0' : '') + month + '/' + (day < 10 ? '0' : '') + day;
            document.getElementById("<%=lblenqmdon.ClientID%>").innerHTML = output;
        };
    });

编辑

您已经在下拉菜单和标签上设置了 ClientIDMode="static" 以便 javascript 通过确切的 id 找到

关于javascript - 如何解决 DropDownList 更改时的 Javascript 未捕获引用错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30618791/

相关文章:

javascript - 获取我点击的元素相对于 jquery 集合的索引

javascript - 如何获取 JSON 中某个键的值

c# - 使用 Watin 选择一个选项

php - C2DM应用服务器解决方案

c# - 隐藏数据网格中的列,而不设置 column.visible=false

javascript - 将按钮添加到动态 html 表 javascript

javascript - HTML5 游戏 - 导入的 JQuery 文件将不起作用

jQuery 仅在 <h2> block 而不是背景中隐藏文本

jquery - 如何从两个表中获取ID列表并在我的sql中传递第三个表

c# - 如何在文件上传控件中获取文件类型?