JavaScript不在本地工作,但在小提琴上工作

时间:2013-12-30 15:41:21

标签: javascript momentjs

我试图阻止用户输入错误的日期。我找到了Momemnt.js来处理日期,它适用于fiddle

      <script type="text/javascript" src='http://momentjs.com/downloads/moment-with-langs.min.js'>



    $(document).ready(function() {

       function CheckForPastDate(sender, args) {

    selectedDate = sender._selectedDate;
    var todayDate = new Date();
    if (selectedDate.getTime() < todayDate.getTime()) {
        sender.selectedDate = todayDate;
        sender._textbox.value = moment(selectedDate).format(sender._format);
        alert("Wrong date!");
       }
   }

 CheckForPastDate({
 _textbox: document.getElementById('<%#TextBox1.ClientID %>'),
 _selectedDate: new Date(2013, 5, 3),
 _format: 'MMMM Do YYYY, h:mm:ss a'
  });



});






     </script>
     </head>
 <body>
<form id="form1" runat="server">
<div>
    <asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">   
       </asp:ToolkitScriptManager>
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    <asp:CalendarExtender ID="TextBox1_CalendarExtender" runat="server" Enabled="True" 
        TargetControlID="TextBox1" OnClientDateSelectionChanged="CheckForPastDate">
    </asp:CalendarExtender>
    </div>
    </form>
  </body>
   </html>

所以我使用nuget下载了moment.js,但无论如何它都无法正常工作。我没有任何例外,但我也没有得到错误的日期消息。

2 个答案:

答案 0 :(得分:1)

假设您在使用之前在页面的某个位置引用moments.js库,如果您在代码中按此顺序(按此顺序),则在执行Javascript时,控件不会页面上还没有。你应该将javascript放在HTML / ASPX代码下面,或者更好,在文档准备就绪时执行你的javascript。

这与JSFiddle有所不同:javascript代码放在渲染中的HTML代码之后。

您还应该知道,.NET中的不同内容可能会导致控件的客户端ID发生更改。我的意思是,如果你把它放到一个面板中,一旦用HTML呈现你的文本框的结果ID很可能(尽管你现在可以设置它,如果我没有弄错的话)与你在JavaScript的。它将包括所有容器的id,即父面板的ID。

答案 1 :(得分:0)

添加

<script src = 'http://momentjs.com/downloads/moment-with-langs.min.js' />

您必须include moment库来调用moment()函数。

它适用于 fiddle ,因为它包含在外部资源中。