mirror of
https://github.com/github/rails.git
synced 2026-05-04 03:00:06 -04:00
Move checkbox hidden field before the actual checkbox so the actual value doesn't get clobbered [#1863 state:resolved]
This commit is contained in:
@@ -753,7 +753,9 @@ module ActionView
|
||||
end
|
||||
options["checked"] = "checked" if checked
|
||||
add_default_name_and_id(options)
|
||||
tag("input", options) << tag("input", "name" => options["name"], "type" => "hidden", "value" => options['disabled'] && checked ? checked_value : unchecked_value)
|
||||
hidden = tag("input", "name" => options["name"], "type" => "hidden", "value" => options['disabled'] && checked ? checked_value : unchecked_value)
|
||||
checkbox = tag("input", options)
|
||||
hidden + checkbox
|
||||
end
|
||||
|
||||
def to_boolean_select_tag(options = {})
|
||||
|
||||
@@ -170,36 +170,36 @@ class FormHelperTest < ActionView::TestCase
|
||||
|
||||
def test_check_box
|
||||
assert_dom_equal(
|
||||
'<input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="1" /><input name="post[secret]" type="hidden" value="0" />',
|
||||
'<input name="post[secret]" type="hidden" value="0" /><input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="1" />',
|
||||
check_box("post", "secret")
|
||||
)
|
||||
@post.secret = 0
|
||||
assert_dom_equal(
|
||||
'<input id="post_secret" name="post[secret]" type="checkbox" value="1" /><input name="post[secret]" type="hidden" value="0" />',
|
||||
'<input name="post[secret]" type="hidden" value="0" /><input id="post_secret" name="post[secret]" type="checkbox" value="1" />',
|
||||
check_box("post", "secret")
|
||||
)
|
||||
assert_dom_equal(
|
||||
'<input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="1" /><input name="post[secret]" type="hidden" value="0" />',
|
||||
'<input name="post[secret]" type="hidden" value="0" /><input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="1" />',
|
||||
check_box("post", "secret" ,{"checked"=>"checked"})
|
||||
)
|
||||
@post.secret = true
|
||||
assert_dom_equal(
|
||||
'<input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="1" /><input name="post[secret]" type="hidden" value="0" />',
|
||||
'<input name="post[secret]" type="hidden" value="0" /><input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="1" />',
|
||||
check_box("post", "secret")
|
||||
)
|
||||
assert_dom_equal(
|
||||
'<input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="1" /><input name="post[secret]" type="hidden" value="0" />',
|
||||
'<input name="post[secret]" type="hidden" value="0" /><input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="1" />',
|
||||
check_box("post", "secret?")
|
||||
)
|
||||
|
||||
@post.secret = ['0']
|
||||
assert_dom_equal(
|
||||
'<input id="post_secret" name="post[secret]" type="checkbox" value="1" /><input name="post[secret]" type="hidden" value="0" />',
|
||||
'<input name="post[secret]" type="hidden" value="0" /><input id="post_secret" name="post[secret]" type="checkbox" value="1" />',
|
||||
check_box("post", "secret")
|
||||
)
|
||||
@post.secret = ['1']
|
||||
assert_dom_equal(
|
||||
'<input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="1" /><input name="post[secret]" type="hidden" value="0" />',
|
||||
'<input name="post[secret]" type="hidden" value="0" /><input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="1" />',
|
||||
check_box("post", "secret")
|
||||
)
|
||||
end
|
||||
@@ -207,14 +207,14 @@ class FormHelperTest < ActionView::TestCase
|
||||
def test_check_box_with_explicit_checked_and_unchecked_values
|
||||
@post.secret = "on"
|
||||
assert_dom_equal(
|
||||
'<input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="on" /><input name="post[secret]" type="hidden" value="off" />',
|
||||
'<input name="post[secret]" type="hidden" value="off" /><input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="on" />',
|
||||
check_box("post", "secret", {}, "on", "off")
|
||||
)
|
||||
end
|
||||
|
||||
def test_checkbox_disabled_still_submits_checked_value
|
||||
assert_dom_equal(
|
||||
'<input checked="checked" disabled="disabled" id="post_secret" name="post[secret]" type="checkbox" value="1" /><input name="post[secret]" type="hidden" value="1" />',
|
||||
'<input name="post[secret]" type="hidden" value="1" /><input checked="checked" disabled="disabled" id="post_secret" name="post[secret]" type="checkbox" value="1" />',
|
||||
check_box("post", "secret", { :disabled => :true })
|
||||
)
|
||||
end
|
||||
@@ -289,7 +289,7 @@ class FormHelperTest < ActionView::TestCase
|
||||
text_area("post", "body", "name" => "really!")
|
||||
)
|
||||
assert_dom_equal(
|
||||
'<input checked="checked" id="post_secret" name="i mean it" type="checkbox" value="1" /><input name="i mean it" type="hidden" value="0" />',
|
||||
'<input name="i mean it" type="hidden" value="0" /><input checked="checked" id="post_secret" name="i mean it" type="checkbox" value="1" />',
|
||||
check_box("post", "secret", "name" => "i mean it")
|
||||
)
|
||||
assert_dom_equal text_field("post", "title", "name" => "dont guess"),
|
||||
@@ -309,7 +309,7 @@ class FormHelperTest < ActionView::TestCase
|
||||
text_area("post", "body", "id" => "really!")
|
||||
)
|
||||
assert_dom_equal(
|
||||
'<input checked="checked" id="i mean it" name="post[secret]" type="checkbox" value="1" /><input name="post[secret]" type="hidden" value="0" />',
|
||||
'<input name="post[secret]" type="hidden" value="0" /><input checked="checked" id="i mean it" name="post[secret]" type="checkbox" value="1" />',
|
||||
check_box("post", "secret", "id" => "i mean it")
|
||||
)
|
||||
assert_dom_equal text_field("post", "title", "id" => "dont guess"),
|
||||
@@ -334,7 +334,7 @@ class FormHelperTest < ActionView::TestCase
|
||||
text_area("post[]", "body")
|
||||
)
|
||||
assert_dom_equal(
|
||||
"<input checked=\"checked\" id=\"post_#{pid}_secret\" name=\"post[#{pid}][secret]\" type=\"checkbox\" value=\"1\" /><input name=\"post[#{pid}][secret]\" type=\"hidden\" value=\"0\" />",
|
||||
"<input name=\"post[#{pid}][secret]\" type=\"hidden\" value=\"0\" /><input checked=\"checked\" id=\"post_#{pid}_secret\" name=\"post[#{pid}][secret]\" type=\"checkbox\" value=\"1\" />",
|
||||
check_box("post[]", "secret")
|
||||
)
|
||||
assert_dom_equal(
|
||||
@@ -360,8 +360,8 @@ class FormHelperTest < ActionView::TestCase
|
||||
"<label for='post_title'>Title</label>" +
|
||||
"<input name='post[title]' size='30' type='text' id='post_title' value='Hello World' />" +
|
||||
"<textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
|
||||
"<input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />" +
|
||||
"<input name='post[secret]' type='hidden' value='0' />" +
|
||||
"<input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />" +
|
||||
"<input name='commit' id='post_submit' type='submit' value='Create post' />" +
|
||||
"</form>"
|
||||
|
||||
@@ -380,8 +380,8 @@ class FormHelperTest < ActionView::TestCase
|
||||
"<div style='margin:0;padding:0'><input name='_method' type='hidden' value='put' /></div>" +
|
||||
"<input name='post[title]' size='30' type='text' id='post_title' value='Hello World' />" +
|
||||
"<textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
|
||||
"<input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />" +
|
||||
"<input name='post[secret]' type='hidden' value='0' />" +
|
||||
"<input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />" +
|
||||
"</form>"
|
||||
|
||||
assert_dom_equal expected, output_buffer
|
||||
@@ -398,8 +398,8 @@ class FormHelperTest < ActionView::TestCase
|
||||
"<form action='http://www.example.com' id='create-post' method='post'>" +
|
||||
"<input name='post[title]' size='30' type='text' id='post_title' value='Hello World' />" +
|
||||
"<textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
|
||||
"<input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />" +
|
||||
"<input name='post[secret]' type='hidden' value='0' />" +
|
||||
"<input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />" +
|
||||
"</form>"
|
||||
|
||||
assert_dom_equal expected, output_buffer
|
||||
@@ -418,8 +418,8 @@ class FormHelperTest < ActionView::TestCase
|
||||
"<label for=\"post_123_title\">Title</label>" +
|
||||
"<input name='post[123][title]' size='30' type='text' id='post_123_title' value='Hello World' />" +
|
||||
"<textarea name='post[123][body]' id='post_123_body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
|
||||
"<input name='post[123][secret]' checked='checked' type='checkbox' id='post_123_secret' value='1' />" +
|
||||
"<input name='post[123][secret]' type='hidden' value='0' />" +
|
||||
"<input name='post[123][secret]' checked='checked' type='checkbox' id='post_123_secret' value='1' />" +
|
||||
"</form>"
|
||||
|
||||
assert_dom_equal expected, output_buffer
|
||||
@@ -436,8 +436,8 @@ class FormHelperTest < ActionView::TestCase
|
||||
"<form action='http://www.example.com' method='post'>" +
|
||||
"<input name='post[][title]' size='30' type='text' id='post__title' value='Hello World' />" +
|
||||
"<textarea name='post[][body]' id='post__body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
|
||||
"<input name='post[][secret]' checked='checked' type='checkbox' id='post__secret' value='1' />" +
|
||||
"<input name='post[][secret]' type='hidden' value='0' />" +
|
||||
"<input name='post[][secret]' checked='checked' type='checkbox' id='post__secret' value='1' />" +
|
||||
"</form>"
|
||||
|
||||
assert_dom_equal expected, output_buffer
|
||||
@@ -708,8 +708,8 @@ class FormHelperTest < ActionView::TestCase
|
||||
expected =
|
||||
"<input name='post[title]' size='30' type='text' id='post_title' value='Hello World' />" +
|
||||
"<textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
|
||||
"<input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />" +
|
||||
"<input name='post[secret]' type='hidden' value='0' />"
|
||||
"<input name='post[secret]' type='hidden' value='0' />" +
|
||||
"<input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />"
|
||||
|
||||
assert_dom_equal expected, output_buffer
|
||||
end
|
||||
@@ -724,8 +724,8 @@ class FormHelperTest < ActionView::TestCase
|
||||
expected =
|
||||
"<input name='post[123][title]' size='30' type='text' id='post_123_title' value='Hello World' />" +
|
||||
"<textarea name='post[123][body]' id='post_123_body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
|
||||
"<input name='post[123][secret]' checked='checked' type='checkbox' id='post_123_secret' value='1' />" +
|
||||
"<input name='post[123][secret]' type='hidden' value='0' />"
|
||||
"<input name='post[123][secret]' type='hidden' value='0' />" +
|
||||
"<input name='post[123][secret]' checked='checked' type='checkbox' id='post_123_secret' value='1' />"
|
||||
|
||||
assert_dom_equal expected, output_buffer
|
||||
end
|
||||
@@ -740,8 +740,8 @@ class FormHelperTest < ActionView::TestCase
|
||||
expected =
|
||||
"<input name='post[][title]' size='30' type='text' id='post__title' value='Hello World' />" +
|
||||
"<textarea name='post[][body]' id='post__body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
|
||||
"<input name='post[][secret]' checked='checked' type='checkbox' id='post__secret' value='1' />" +
|
||||
"<input name='post[][secret]' type='hidden' value='0' />"
|
||||
"<input name='post[][secret]' type='hidden' value='0' />" +
|
||||
"<input name='post[][secret]' checked='checked' type='checkbox' id='post__secret' value='1' />"
|
||||
|
||||
assert_dom_equal expected, output_buffer
|
||||
end
|
||||
@@ -756,8 +756,8 @@ class FormHelperTest < ActionView::TestCase
|
||||
expected =
|
||||
"<input name='post[abc][title]' size='30' type='text' id='post_abc_title' value='Hello World' />" +
|
||||
"<textarea name='post[abc][body]' id='post_abc_body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
|
||||
"<input name='post[abc][secret]' checked='checked' type='checkbox' id='post_abc_secret' value='1' />" +
|
||||
"<input name='post[abc][secret]' type='hidden' value='0' />"
|
||||
"<input name='post[abc][secret]' type='hidden' value='0' />" +
|
||||
"<input name='post[abc][secret]' checked='checked' type='checkbox' id='post_abc_secret' value='1' />"
|
||||
|
||||
assert_dom_equal expected, output_buffer
|
||||
end
|
||||
@@ -772,8 +772,8 @@ class FormHelperTest < ActionView::TestCase
|
||||
expected =
|
||||
"<input name='post[title]' size='30' type='text' id='post_title' value='Hello World' />" +
|
||||
"<textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
|
||||
"<input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />" +
|
||||
"<input name='post[secret]' type='hidden' value='0' />"
|
||||
"<input name='post[secret]' type='hidden' value='0' />" +
|
||||
"<input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />"
|
||||
|
||||
assert_dom_equal expected, output_buffer
|
||||
end
|
||||
@@ -788,8 +788,8 @@ class FormHelperTest < ActionView::TestCase
|
||||
expected =
|
||||
"<input name='post[title]' size='30' type='text' id='post_title' value='Hello World' />" +
|
||||
"<textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
|
||||
"<input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />" +
|
||||
"<input name='post[secret]' type='hidden' value='0' />"
|
||||
"<input name='post[secret]' type='hidden' value='0' />" +
|
||||
"<input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />"
|
||||
|
||||
assert_dom_equal expected, output_buffer
|
||||
end
|
||||
@@ -834,8 +834,8 @@ class FormHelperTest < ActionView::TestCase
|
||||
"<form action='http://www.example.com' id='create-post' method='post'>" +
|
||||
"<input name='post[title]' size='30' type='text' id='post_title' value='Hello World' />" +
|
||||
"<textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
|
||||
"<input name='parent_post[secret]' checked='checked' type='checkbox' id='parent_post_secret' value='1' />" +
|
||||
"<input name='parent_post[secret]' type='hidden' value='0' />" +
|
||||
"<input name='parent_post[secret]' checked='checked' type='checkbox' id='parent_post_secret' value='1' />" +
|
||||
"</form>"
|
||||
|
||||
assert_dom_equal expected, output_buffer
|
||||
@@ -883,8 +883,7 @@ class FormHelperTest < ActionView::TestCase
|
||||
"<form action='http://www.example.com' method='post'>" +
|
||||
"<label for='title'>Title:</label> <input name='post[title]' size='30' type='text' id='post_title' value='Hello World' /><br/>" +
|
||||
"<label for='body'>Body:</label> <textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea><br/>" +
|
||||
"<label for='secret'>Secret:</label> <input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />" +
|
||||
"<input name='post[secret]' type='hidden' value='0' /><br/>" +
|
||||
"<label for='secret'>Secret:</label> <input name='post[secret]' type='hidden' value='0' /><input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' /><br/>" +
|
||||
"</form>"
|
||||
|
||||
assert_dom_equal expected, output_buffer
|
||||
@@ -904,8 +903,7 @@ class FormHelperTest < ActionView::TestCase
|
||||
"<form action='http://www.example.com' method='post'>" +
|
||||
"<label for='title'>Title:</label> <input name='post[title]' size='30' type='text' id='post_title' value='Hello World' /><br/>" +
|
||||
"<label for='body'>Body:</label> <textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea><br/>" +
|
||||
"<label for='secret'>Secret:</label> <input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />" +
|
||||
"<input name='post[secret]' type='hidden' value='0' /><br/>" +
|
||||
"<label for='secret'>Secret:</label> <input name='post[secret]' type='hidden' value='0' /><input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' /><br/>" +
|
||||
"</form>"
|
||||
|
||||
assert_dom_equal expected, output_buffer
|
||||
@@ -960,8 +958,7 @@ class FormHelperTest < ActionView::TestCase
|
||||
%(<form action="http://www.example.com" onsubmit="new Ajax.Request('http://www.example.com', {asynchronous:true, evalScripts:true, parameters:Form.serialize(this)}); return false;" method="post">) +
|
||||
"<label for='title'>Title:</label> <input name='post[title]' size='30' type='text' id='post_title' value='Hello World' /><br/>" +
|
||||
"<label for='body'>Body:</label> <textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea><br/>" +
|
||||
"<label for='secret'>Secret:</label> <input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />" +
|
||||
"<input name='post[secret]' type='hidden' value='0' /><br/>" +
|
||||
"<label for='secret'>Secret:</label> <input name='post[secret]' type='hidden' value='0' /><input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' /><br/>" +
|
||||
"</form>"
|
||||
|
||||
assert_dom_equal expected, output_buffer
|
||||
@@ -977,8 +974,7 @@ class FormHelperTest < ActionView::TestCase
|
||||
expected =
|
||||
"<label for='title'>Title:</label> <input name='post[title]' size='30' type='text' id='post_title' value='Hello World' /><br/>" +
|
||||
"<label for='body'>Body:</label> <textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea><br/>" +
|
||||
"<label for='secret'>Secret:</label> <input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />" +
|
||||
"<input name='post[secret]' type='hidden' value='0' /><br/>"
|
||||
"<label for='secret'>Secret:</label> <input name='post[secret]' type='hidden' value='0' /><input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' /><br/>"
|
||||
|
||||
assert_dom_equal expected, output_buffer
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user