auto_complete_field and ENTER

I use auto-complete to help with tag entry and a few other areas. Some
example code is:

<label for="f_r_tags">Tags (ex: "sales compliance", marketing, fast)</

<br/>

<%= form.text_field :tag_list, :maxlength => 255, :id =>
'f_r_tags', :autocomplete => 'off' %>
<%= ajax_spinner_for('f_r_tags') %>
<%= content_tag('div', '', :class => 'auto_complete', :id =>
'f_r_tags_auto_complete') %>
<%= auto_complete_field('f_r_tags', :url =>
autocomplete_tags_requests_path, :method => :get, :frequency =>
0.5, :indicator => 'f_r_tags_spinner', :tokens => ',') %>

Everything works great, but how do I prevent ENTER from submitting the
form. When people use this, they usually start typing, see the tag
they want, use the arrow keys to select the tag, then hit enter to
select it. However, rather than do what is expected, the form gets
submitted. It drives the user nuts.

I want enter to submit the form only when not selecting a tag from the
auto-complete list. Is this possible?

After some more digging, it seems like I'm not the only one seeing
this: http://dev.rubyonrails.org/ticket/2600.

Yes, you can prevent form submission capturing the return key. To do that include something like this in tag_options:

     # starting point, needs more work to be portable
     :onkeypress => "return event.which == Event.KEY_RETURN ? false : true"

-- fxn

Which element do I add :onkeypress to?

Also, this problem looks to be limited to FF 2 on OSX. Enter does not
submit the form on Safari 3, WinFF2, or IE7.

Which element do I add :onkeypress to?

The option goes in the hash that is the 3rd argument of text_field_with_auto_complete.

Also, this problem looks to be limited to FF 2 on OSX. Enter does not
submit the form on Safari 3, WinFF2, or IE7.

Yes, I am no JavaScript expert but experience says that particular issue is a bit brittle.

I don't like disabling the return key that way indeed. I'd prefer to let the user select with the keyboard using the return key in the completion list, and still be able to send the form if he's in the very text field. I have not found a way to accomplish that in a robust and portable way.

-- fxn