The CalendarExtender control is awesome. My only issue with it is that, when the textbox date field is entered by tabbing (using the keyboard), the calendar pops up and the user is forced to use the mouse to make a selection, even if the selection is today. Many users like to be able to hit a key or a couple keys to select a date close to today without having to take their hands off the keyboard.
I solved this by adding a simple javascript fuction that is shared below in case anyone else has a similar need. The result is a CalendarExtender control that you can tab into, hit an arrow to initialize the selection with today's date, then continue (if you wish) to use up, down, and side arrows to move back one week, forward one week, or by single day before or after. Please post any improvements.
function DateField_KeyDown(dateField, calendarExtenderName) { lastKeyCodeEntered=window.event.keyCode; if ((lastKeyCodeEntered == '37') //keyCode 37=left arrow || (lastKeyCodeEntered == '38') //keyCode 38=up arrow || (lastKeyCodeEntered == '39') //keyCode 39=right arrow || (lastKeyCodeEntered == '40')) //keyCode 40=down arrow { var dtbehav = $find(calendarExtenderName); var enteredDate = dtbehav.get_selectedDate(); if (enteredDate == null) { enteredDate = new Date(); } else { advanceValue = 0; switch (lastKeyCodeEntered) { case 37: advanceDays = -1; break; case 38: advanceDays = -7; break; case 39: advanceDays = 1; break; case 40: advanceDays = 7; break; } enteredDate.setDate(enteredDate.getDate() + advanceDays); } dateField.value = (enteredDate.getMonth()+1) + "/" + enteredDate.getDate() + "/" + enteredDate.getFullYear(); dtbehav.set_selectedDate(dateField.value); } }
Then I simply wired the above javascript function to my textbox's "onkeydown" event in the (server-side) Page_Load for my page:
txtDateReceived.Attributes.Add("onkeydown", "DateField_KeyDown(this,'" + myCalendarExtenderID.ClientID + "')");