views:

106

answers:

1

I am using the rails helper observe_field to observe a the input of a textfield:

<%= observe_field :word_word, :frequency  => 0.25, :function => "wordObserve('#{@word_str}')" %>

When the textfield input becomes a certain value, I would like to stop observing. I have tried both Event.stop() and Event.stopObserving(element, eventName, handler) but neither seem to work. Any ideas?

+1  A: 

To stop an observer you have to call stop method on the observer. By default observe_field helper, creates an unnamed observer. You have to patch the helper to create a named observer.

Add this patch to your app/helpers/application_helper.rb.

module ActionView::Helpers::PrototypeHelper

  def observe_field(field_id, options = {})
    poller_name, key = options.delete(:poller_name), "new Form.Element.Observer"

    poller_name ? super : 
        super(field_id, options).gsub(Regexp.new(Regexp.escape(key)), 
           "var #{poller_name} = #{key}") 
  end
end

Create a named field observer in your view:

<%= observe_field :word_word, :frequency  => 0.25, 
                  :poller_name => :word_word_poller
                  :function => "wordObserve('#{@word_str}')" %>

In java-script callback function, call word_word_poller.stop to stop observing the field.

Reference

1) How to remove a Form.Element.Observer

KandadaBoggu