The onChange event doesn't work with cfinput type datefield using CFML in a plain HTML form.
In Flash form and flex, the onChange event works perfectly, i.e. whenever you choose a new date, the event fires.
In HTML form, when you choose a new date from the datefield, the event doesn't fire. You have to select the new date, then click into the textbox and hit the enter key. Then only it fires the onChange event. Very strange indeed!
Any ideas how to get this feature working or is it a bug in CF itself?
Thanks.
From my reading of the HTML spec, it's not a bug, it's how the onchange event works. The spec says:
The onchange event occurs when a control loses the input focus and its value has been modified since gaining focus
(My emphasis).
(http://www.w3.org/TR/html401/interact/scripts.html#adef-onchange)
When changing the control's value via script, the control never gets the focus, so implicitly never loses the focus, which is a prereq for the onchange event to fire.
The same thing happens if one changes a normal form input control via script. No event fires.
--
Adam
Thanks Adam!
I've come across a possible workaround to this issue.
You can find it here: http://www.coldfusionjedi.com/index.cfm/2008/10/1/Ask-a-Jedi-ColdFusio n-datefieldchange-question
Hope this helps others as well.
Regards
I do however have an issue with the cfinput type datefield.
How do you disable Saturdays and Sundays?
In Flash form and Flex, we only use disabledDays=[0,6]
For example,
<cfinput
type="datefield"
id="valuationDate_txt"
name="valuationDate_txt"
mask="dd/mm/yyyy" width="50"
value="#lsdateformat(now(),'dd/mm/yyyy')#"
onFocus="valuationDate_txt.disabledDays = [0,6];">
How do we make the disabledDays=[0,6] work with the cfinput type datefield?
Thanks and regards.
I have no idea, but I would start a new topic rather than tack it on to this one, because that question has nothing to do with the subject line. People who might not know about onchange events but do know about enabling/displaying specific days will perhaps not see your question, as they might not bother reading it.
--
Adam
This may not be the most elegant solution out there, but it works okay.
====== Javascript Code ======
i = 0;
function doSubmit(caldate) {
i++;
if (i>1) {
window.location = "index.cfm?caldate=" + document.getElementById('caldate').value;
}
}
=====CFML Code ======
<cfform ... typical code here ....>
<cfinput type="datetime" id="caldate" ...typical code here .... />
<cfajaxproxy bind="javaScript:doSubmit({caldate})">
</cfform>
What this does is fires doSubmit each time the form controls are touched or the value is modified. When this happens, it will increment i. You will fire doSubmit twice (once to open the calendar and then once when a date is actually selected). So you want to fire when i = 2 or when i > 1.
North America
Europe, Middle East and Africa
Asia Pacific