我测试了您的代码,当在日期选择器上选择日期时,将触发 TextChanged 服务器端方法。
我所做的一个微小的改变是重构 jquery 以驻留在 $(document).ready() 函数中
<script type="text/javascript">
$(document).ready(function() {
$(".datepicker").datepicker({
constrainInput: true,
dateFormat: 'dd D M yy'
});
});
</script>
请参阅下面的完整代码。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DatePickerTest.aspx.cs" Inherits="TestApp.DatePickerTest" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
<script type='text/javascript' src='http://code.jquery.com/jquery-1.4.2.js'></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.4/jquery-ui.js"></script>
<link rel="stylesheet" type="text/css" href="/css/normalize.css"/>
<link rel="stylesheet" type="text/css" href="/css/result-light.css"/>
<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.4/themes/smoothness/jquery-ui.css"/>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="txtPickupDate" runat="server" OnTextChanged="txtPickupDate_TextChanged" CssClass="datepicker" AutoPostBack="true"></asp:TextBox>
</div>
</form>
<script type="text/javascript">
$(document).ready(function() {
$(".datepicker").datepicker({
constrainInput: true,
dateFormat: 'dd D M yy'
});
});
</script>
</body>
</html>
和服务器端
protected void txtPickupDate_TextChanged(object sender, EventArgs e)
{
DateTime pickupDate = DateTime.Parse(txtPickupDate.Text);
}
根据以下评论进行编辑:
要允许 TextChanged 事件在回发后继续触发,您可以使用
.live() 如果不使用现在最新版本的 jquery已弃用 http://api.jquery.com/live/
$(function() {
$('.datepicker').live('click', function() {
$(this).datepicker({
constrainInput: true, dateFormat: 'dd D M yy'
}).focus();
});
});
or .on() http://api.jquery.com/on/使用最新版本的 JQuery 1.7 及更高版本
$('body').on('click', '.datepicker', function() {
$(this).datepicker({
constrainInput: true, dateFormat: 'dd D M yy'
}).focus();
});