ColdFusion 8: Getting the value of AJAX-ified controls

I ran into a problem last night trying to use JavaScript to read the value of a rich text field. I had assumed I could use the normal syntax I'd use for a form field:

document.forms[0].body.value

or

document.getElementById('body')

But neither of these worked correctly. Turns out the JavaScript API provided in ColdFusion 8 has an API for this: ColdFusion.getElementValue(elementId, formID, attributeName). The formID and attributeName values are optional. Here is a simple example:

<script>
function test() {
   var body = ColdFusion.getElementValue('body');
   alert(body);
   return false;
}
</script>

<cfform onSubmit="return test()">
<cftextarea richtext="true" name="body" />
<input type="submit">
</cfform>

In case you are curious - the value includes all the HTML from the rich text value as you would probably expect.

The API can also be used on grids and trees. For grids, you have to provide the column name, and for trees you ask for either the node or the path value.

Comments

As a newb I don't really know about AJAX. Could somebody point me in the right direction as to where I can find out more?
# Posted By ElGuapo | 6/19/07 7:49 AM
That's kind of a huge question. I'm actually not aware of a a good 'Basic AJAX' site out there. Most frameworks will teach you how to use their frameworks, of course. My personal preference for an AJAX framework is Adobe Spry (you can find it at labs.adobe.com). I find it very simple to learn and use.
# Posted By Raymond Camden | 6/19/07 8:15 AM
Hi Ray - did you have to use the "ColdFusion" scope because you used the cfform tag?
# Posted By David | 6/19/07 9:56 AM
The ColdFusion object is included whenever you do AJAXy stuff. It is where the JS API lives.
# Posted By Raymond Camden | 6/19/07 9:58 AM
GASP! Ray using a RTE!!!!!!!!!!!
# Posted By todd sharp | 6/19/07 10:18 AM
Don't tell anyone.


FYI, BlogCFC will have an option to enable this out of the box. For those who want it.
# Posted By Raymond Camden | 6/19/07 10:24 AM