When you say that you are CFPARAming all the FORM data, what exactly are you using for the default values? Seems like all you need to do is to do the query to get database values, and then a string of CFPARAMs for each FORM field, where you set the default value to the corresponding value from the query. Then just use the FORM value in the VALUE clause of the CFINPUT.
Was also not clear about how you are doing the client-side validation with JS - are you using the built-in CFINPUT features, or your own JS? if you are using your own JS, then don't use CFINPUT, just INPUT. That way you can have the CFIF tags inside of the INPUT tag. If you actually need to use the CFINPUT tags, then you can avoid the IFF/DE hassle by putting the CFIF tests before the CFINPUT tag, set a temp var to the appropriate value, and then use the temp var in the VALUE for the CFINPUT.
hth
-reed