I''ve run across a problem when attempting to submit a form with the
form_remote_tag when the form contains multiple submit buttons.
My form contains 2 submit buttons, a "Preview" button and a "Post
Message" button:
<%= submit_tag ''Preview'' %>
<%= submit_tag ''Post Message'' %>
When the form is submitted, the value of @params[''commit''] is
the
value of the first submit tag (''Preview'' in this case) no
matter what
button is used to submit the form.
This is not present when changing the form to a standard non-ajax form.
Any one else run across this problem or have a suggested fix?
--
Derek Haynes
HighGroove Studios - http://www.highgroove.com
Atlanta, GA
Keeping it Simple.
404.593.4879
Hi, Derek, I just ran across this misbehaviour and found your post. Have you found any solution? I''ve filed a bug report with Ticket #3231 Regards Jan Prill derek.haynes wrote:> I''ve run across a problem when attempting to submit a form with the > form_remote_tag when the form contains multiple submit buttons. > > My form contains 2 submit buttons, a "Preview" button and a "Post > Message" button: > <%= submit_tag ''Preview'' %> > <%= submit_tag ''Post Message'' %> > > When the form is submitted, the value of @params[''commit''] is the > value of the first submit tag (''Preview'' in this case) no matter what > button is used to submit the form. > > This is not present when changing the form to a standard non-ajax form. > > Any one else run across this problem or have a suggested fix? > > > -- > Derek Haynes > HighGroove Studios - http://www.highgroove.com > Atlanta, GA > Keeping it Simple. > 404.593.4879-- Posted via http://www.ruby-forum.com/.
I ran into the same problem. The prototype library is being used for
the client-side AJAX serialization -- specifically the Form.serialize()
method.
http://roberthanson.blogspot.com/2005/11/prototypejs-form.html
It appears that the serialize method does not know which button was
clicked. Therefore, it does not know which button to put into the
serialization. That is just my guess since by no means am I a
javascript expert.
Here is a workaround, though. Prepare yourself for an ugly hack :(
<%= hidden_field_tag(''commit'', ''Preview'')
%>
<%= submit_tag(''Preview'', :name =>
''_commit'') %>
<%= submit_tag(''Post Message'', :name =>
''_commit'',
:onclick => "Form.getInputs(this.form, null,
''commit'')[0].value = ''Post Message''")
%>
The trick here is to create a hidden input field named
''commit'' that
will be serialized by the prototype javascript code. The default value
is ''Preview''. The javascript attached to the ''Post
Message'' button will
change the value of the hidden field to be ''Post Message''.
Hope this helps.
Blessings,
Tim Pease
derek.haynes wrote:> I''ve run across a problem when attempting to submit a form with
the
> form_remote_tag when the form contains multiple submit buttons.
>
> My form contains 2 submit buttons, a "Preview" button and a
"Post
> Message" button:
> <%= submit_tag ''Preview'' %>
> <%= submit_tag ''Post Message'' %>
>
> When the form is submitted, the value of
@params[''commit''] is the
> value of the first submit tag (''Preview'' in this case) no
matter what
> button is used to submit the form.
>
> This is not present when changing the form to a standard non-ajax form.
>
> Any one else run across this problem or have a suggested fix?
>
>
> --
> Derek Haynes
> HighGroove Studios - http://www.highgroove.com
> Atlanta, GA
> Keeping it Simple.
> 404.593.4879
--
Posted via http://www.ruby-forum.com/.
The following code placed in application_helper.rb or loaded via /lib
works around this problem while allowing normal submit_tag() useage.
This is not well tested, but seems to do the trick for me.
class ActionView::Base
alias_method :rails_submit_tag, :submit_tag
def submit_tag(value = "Save changes", options = {})
options[:id] = (options[:id] || options[:name] || :commit)
options.update(:onclick =>
"$(''#{options[:id]}'').value
''#{value}''")
rails_submit_tag(value, options)
end
end
So this rails code:
<%= submit_tag ''Transfer'', :name => :submit %>
<%= submit_tag ''Check IN'' %>
produces this HTML:
<input id="submit" name="submit"
onclick="$(''submit'').value
''Transfer''" value="Transfer"
type="submit">
<input id="commit" name="commit"
onclick="$(''commit'').value = ''Check
IN''" value="Check IN" type="submit">
derek.haynes wrote:> I''ve run across a problem when attempting to submit a form with
the
> form_remote_tag when the form contains multiple submit buttons.
>
> My form contains 2 submit buttons, a "Preview" button and a
"Post
> Message" button:
> <%= submit_tag ''Preview'' %>
> <%= submit_tag ''Post Message'' %>
>
> When the form is submitted, the value of
@params[''commit''] is the
> value of the first submit tag (''Preview'' in this case) no
matter what
> button is used to submit the form.
>
> This is not present when changing the form to a standard non-ajax form.
>
> Any one else run across this problem or have a suggested fix?
>
>
> --
> Derek Haynes
> HighGroove Studios - http://www.highgroove.com
> Atlanta, GA
> Keeping it Simple.
> 404.593.4879
--
Posted via http://www.ruby-forum.com/.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk
-~----------~----~----~----~------~----~------~--~---
what''s the status on this bug? Is it something that''s ever going to be fixed? I try to stay away from Ajax forms with multiple buttons because of this. Mike On 9/21/06, Eddie Roadcap <rails-mailing-list-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> > The following code placed in application_helper.rb or loaded via /lib > works around this problem while allowing normal submit_tag() useage. > This is not well tested, but seems to do the trick for me. > > class ActionView::Base > alias_method :rails_submit_tag, :submit_tag > def submit_tag(value = "Save changes", options = {}) > options[:id] = (options[:id] || options[:name] || :commit) > options.update(:onclick => "$(''#{options[:id]}'').value > ''#{value}''") > rails_submit_tag(value, options) > end > end > > So this rails code: > <%= submit_tag ''Transfer'', :name => :submit %> > <%= submit_tag ''Check IN'' %> > produces this HTML: > <input id="submit" name="submit" onclick="$(''submit'').value > ''Transfer''" value="Transfer" type="submit"> > <input id="commit" name="commit" onclick="$(''commit'').value = ''Check > IN''" value="Check IN" type="submit"> > > > > derek.haynes wrote: > > I''ve run across a problem when attempting to submit a form with the > > form_remote_tag when the form contains multiple submit buttons. > > > > My form contains 2 submit buttons, a "Preview" button and a "Post > > Message" button: > > <%= submit_tag ''Preview'' %> > > <%= submit_tag ''Post Message'' %> > > > > When the form is submitted, the value of @params[''commit''] is the > > value of the first submit tag (''Preview'' in this case) no matter what > > button is used to submit the form. > > > > This is not present when changing the form to a standard non-ajax form. > > > > Any one else run across this problem or have a suggested fix? > > > > > > -- > > Derek Haynes > > HighGroove Studios - http://www.highgroove.com > > Atlanta, GA > > Keeping it Simple. > > 404.593.4879 > > -- > Posted via http://www.ruby-forum.com/. > > > >--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk -~----------~----~----~----~------~----~------~--~---
Mike Garey wrote:> what''s the status on this bug? Is it something that''s ever going to be > fixed? I try to stay away from Ajax forms with multiple buttons > because of this. > > Mike > > On 9/21/06, Eddie Roadcap <rails-mailing-list-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote: > > > > The following code placed in application_helper.rb or loaded via /lib > > works around this problem while allowing normal submit_tag() useage. > > This is not well tested, but seems to do the trick for me. > > > > class ActionView::Base > > alias_method :rails_submit_tag, :submit_tag > > def submit_tag(value = "Save changes", options = {}) > > options[:id] = (options[:id] || options[:name] || :commit) > > options.update(:onclick => "$(''#{options[:id]}'').value > > ''#{value}''") > > rails_submit_tag(value, options) > > end > > end > > > > So this rails code: > > <%= submit_tag ''Transfer'', :name => :submit %> > > <%= submit_tag ''Check IN'' %> > > produces this HTML: > > <input id="submit" name="submit" onclick="$(''submit'').value > > ''Transfer''" value="Transfer" type="submit"> > > <input id="commit" name="commit" onclick="$(''commit'').value = ''Check > > IN''" value="Check IN" type="submit"> > > > > > > > > derek.haynes wrote: > > > I''ve run across a problem when attempting to submit a form with the > > > form_remote_tag when the form contains multiple submit buttons. > > > > > > My form contains 2 submit buttons, a "Preview" button and a "Post > > > Message" button: > > > <%= submit_tag ''Preview'' %> > > > <%= submit_tag ''Post Message'' %> > > > > > > When the form is submitted, the value of @params[''commit''] is the > > > value of the first submit tag (''Preview'' in this case) no matter what > > > button is used to submit the form. > > > > > > This is not present when changing the form to a standard non-ajax form. > > > > > > Any one else run across this problem or have a suggested fix? > > > > > > > > > -- > > > Derek Haynes > > > HighGroove Studios - http://www.highgroove.com > > > Atlanta, GA > > > Keeping it Simple. > > > 404.593.4879 > > > > -- > > Posted via http://www.ruby-forum.com/. > > > > > > >With normal forms, if you give the submit button a different name attribute, the submitted parameters will contain an entry for it. <%= submit_tag ''Preview'', :name=>''preview'' %> params[''preview''] is then defined on submission, and you can use that to figure out which button was pressed. No idea if this works for AJAX forms, but it seems like it should. _Kevin --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk -~----------~----~----~----~------~----~------~--~---
I''ve tried a simple method of creating a hidden
''submit_id'' field.
Every submit button updates it with '':onclick''.
The code I use:
class ActionView::Base
def submit_tag(value = "Save changes", options = {})
options.update(:onclick => "$(''submit_id'').value =
''#{value}''")
super(value,options)
end
end
which is placed in application_helper.rb.
And on your form place a hidden field like so (for example):
<%= %Q!<input id="submit_id" name="submit_id"
type="hidden"
value="12345">! %>
The :submit_id param will contain the right value. At least this is what
worked for me !!
Cheers
--
Posted via http://www.ruby-forum.com/.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk
-~----------~----~----~----~------~----~------~--~---
This is a more compact solution- it only needs to be inserted into your
application_helper.rb
class ActionView::Base
attr_accessor :got_submit
def submit_tag(value = "Save changes", options = {})
options.update(:onclick => "$(''submit_id'').value =
''#{value}''")
if options[:name] && options[:name]==:commit
options[:name]="commit_sub"
elsif options[:name].nil?
options[:name]="commit_sub"
end
res=super(value,options)
if @got_submit.nil?
@got_submit=true
res = res << %Q!<input id="submit_id"
name="commit" type="hidden"
value="12345">!
end
res
end
end
Question:
Is there a better way of inserting the hidden field into a form?
My premise in doing it the way I have done is that you only want a
hidden ''submit_id'' field when you actually have submit
buttons.
Cheers
--
Posted via http://www.ruby-forum.com/.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk
-~----------~----~----~----~------~----~------~--~---
Hi,
If you have only got 2 buttons then you can take advantage of the fact
that disabling a button means that it won''t get posted. In the code
below, when the user presses ''Save'', the save_button gets
disabled and
the controller sees the presence of preview_button. If
''Preview'' gets
pressed then the first button (''save_button'') gets seen as
described in
the earlier posts. It''s ugly and the controller logic looks upside
down,
but it seems to work for me...
<%= submit_tag "Save", :name =>
''save_button'', :disable_with => "..."
%>
<%= submit_tag "Preview", :name =>
''preview_button'' %>
Controller:
def save
# Save button gets disabled when pressed, so no save button means
preview...
if !@params[''save_button''].nil? then
do_preview
else
do_save
end
end
derek.haynes wrote:> I''ve run across a problem when attempting to submit a form with
the
> form_remote_tag when the form contains multiple submit buttons.
>
> My form contains 2 submit buttons, a "Preview" button and a
"Post
> Message" button:
> <%= submit_tag ''Preview'' %>
> <%= submit_tag ''Post Message'' %>
>
> When the form is submitted, the value of
@params[''commit''] is the
> value of the first submit tag (''Preview'' in this case) no
matter what
> button is used to submit the form.
>
> This is not present when changing the form to a standard non-ajax form.
>
> Any one else run across this problem or have a suggested fix?
>
>
> --
> Derek Haynes
> HighGroove Studios - http://www.highgroove.com
> Atlanta, GA
> Keeping it Simple.
> 404.593.4879
--
Posted via http://www.ruby-forum.com/.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk
-~----------~----~----~----~------~----~------~--~---