Friday, May 29, 2009

Character count a textarea in Ruby on Rails

I used to do this with an 'onkeyup' attribute, but that's not available to the 'observe_field' method. But, by setting the frequency to a tenth of a second, it's much better. The character count updates even on keydown and hold.

In the view you just do this

Message (<span id='char_count' ></span > characters)<br>
<%= text_area_tag :description %>
<%= character_count('description','char_count', :frequency => 0.10) %>

And in the helper, you have a 'character_count' method.

def character_count(field_id, update_id, options = {})
function = "$('#{update_id}').innerHTML = $F('#{field_id}').length;"
out = javascript_tag(function) # set current length
out += observe_field(field_id, options.merge(:function => function)) # and observe it