diff options
| author | Jon Dufresne <jon.dufresne@gmail.com> | 2016-07-21 22:05:17 -0700 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2016-08-04 19:16:54 -0400 |
| commit | 50e299dbfbbfd796e63e7e13b4566cf69d2c4acb (patch) | |
| tree | e099779317d600e23cdf45f2e7c0b5a1e69791d8 | |
| parent | ebed9ee8d5e4268d9393261633b2c23cffd426fc (diff) | |
Fixed #26928 -- Changed forms' checked attribute to HTML5 boolean style.
| -rw-r--r-- | django/forms/widgets.py | 14 | ||||
| -rw-r--r-- | docs/ref/forms/api.txt | 21 | ||||
| -rw-r--r-- | docs/ref/forms/widgets.txt | 4 | ||||
| -rw-r--r-- | docs/releases/1.11.txt | 3 | ||||
| -rw-r--r-- | tests/forms_tests/tests/test_forms.py | 16 | ||||
| -rw-r--r-- | tests/forms_tests/tests/test_widgets.py | 22 | ||||
| -rw-r--r-- | tests/forms_tests/widget_tests/test_checkboxinput.py | 14 | ||||
| -rw-r--r-- | tests/forms_tests/widget_tests/test_checkboxselectmultiple.py | 18 | ||||
| -rw-r--r-- | tests/forms_tests/widget_tests/test_radioselect.py | 8 |
9 files changed, 69 insertions, 51 deletions
diff --git a/django/forms/widgets.py b/django/forms/widgets.py index ec076398cc..224bd3de4d 100644 --- a/django/forms/widgets.py +++ b/django/forms/widgets.py @@ -481,9 +481,7 @@ class CheckboxInput(Widget): self.check_test = boolean_check if check_test is None else check_test def render(self, name, value, attrs=None): - final_attrs = self.build_attrs(attrs, type='checkbox', name=name) - if self.check_test(value): - final_attrs['checked'] = 'checked' + final_attrs = self.build_attrs(attrs, type='checkbox', name=name, checked=self.check_test(value)) if not (value is True or value is False or value is None or value == ''): # Only add the 'value' attribute if a value is non-empty. final_attrs['value'] = force_text(value) @@ -646,9 +644,13 @@ class ChoiceInput(SubWidget): def tag(self, attrs=None): attrs = attrs or self.attrs - final_attrs = dict(attrs, type=self.input_type, name=self.name, value=self.choice_value) - if self.is_checked(): - final_attrs['checked'] = 'checked' + final_attrs = dict( + attrs, + type=self.input_type, + name=self.name, + value=self.choice_value, + checked=self.is_checked(), + ) return format_html('<input{} />', flatatt(final_attrs)) @property diff --git a/docs/ref/forms/api.txt b/docs/ref/forms/api.txt index 9e9388344a..de66986e18 100644 --- a/docs/ref/forms/api.txt +++ b/docs/ref/forms/api.txt @@ -430,7 +430,7 @@ If the form is bound to data, the HTML output will include that data appropriately. For example, if a field is represented by an ``<input type="text">``, the data will be in the ``value`` attribute. If a field is represented by an ``<input type="checkbox">``, then that HTML will -include ``checked="checked"`` if appropriate:: +include ``checked`` if appropriate:: >>> data = {'subject': 'hello', ... 'message': 'Hi there', @@ -441,7 +441,12 @@ include ``checked="checked"`` if appropriate:: <tr><th><label for="id_subject">Subject:</label></th><td><input id="id_subject" type="text" name="subject" maxlength="100" value="hello" required /></td></tr> <tr><th><label for="id_message">Message:</label></th><td><input type="text" name="message" id="id_message" value="Hi there" required /></td></tr> <tr><th><label for="id_sender">Sender:</label></th><td><input type="email" name="sender" id="id_sender" value="foo@example.com" required /></td></tr> - <tr><th><label for="id_cc_myself">Cc myself:</label></th><td><input type="checkbox" name="cc_myself" id="id_cc_myself" checked="checked" /></td></tr> + <tr><th><label for="id_cc_myself">Cc myself:</label></th><td><input type="checkbox" name="cc_myself" id="id_cc_myself" checked /></td></tr> + +.. versionchanged:: 1.11 + + The ``checked`` attribute was changed to use HTML5 boolean syntax rather + than ``checked="checked"``. This default output is a two-column HTML table, with a ``<tr>`` for each field. Notice the following: @@ -471,6 +476,10 @@ Notice the following: attributes and ``<label>`` tags are included in the output by default, to follow best practices, but you can change that behavior. +* The output uses HTML5 syntax, targeting ``<!DOCTYPE html>``. For example, + it uses boolean attributes such as ``checked`` rather than the XHTML style + of ``checked='checked'``. + Although ``<table>`` output is the default output style when you ``print`` a form, other output styles are available. Each style is available as a method on a form object, and each rendering method returns a Unicode object. @@ -751,19 +760,19 @@ method you're using:: <tr><th>Subject:</th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="subject" maxlength="100" required /></td></tr> <tr><th>Message:</th><td><input type="text" name="message" value="Hi there" required /></td></tr> <tr><th>Sender:</th><td><ul class="errorlist"><li>Enter a valid email address.</li></ul><input type="email" name="sender" value="invalid email address" required /></td></tr> - <tr><th>Cc myself:</th><td><input checked="checked" type="checkbox" name="cc_myself" /></td></tr> + <tr><th>Cc myself:</th><td><input checked type="checkbox" name="cc_myself" /></td></tr> >>> print(f.as_ul()) <li><ul class="errorlist"><li>This field is required.</li></ul>Subject: <input type="text" name="subject" maxlength="100" required /></li> <li>Message: <input type="text" name="message" value="Hi there" required /></li> <li><ul class="errorlist"><li>Enter a valid email address.</li></ul>Sender: <input type="email" name="sender" value="invalid email address" required /></li> - <li>Cc myself: <input checked="checked" type="checkbox" name="cc_myself" /></li> + <li>Cc myself: <input checked type="checkbox" name="cc_myself" /></li> >>> print(f.as_p()) <p><ul class="errorlist"><li>This field is required.</li></ul></p> <p>Subject: <input type="text" name="subject" maxlength="100" required /></p> <p>Message: <input type="text" name="message" value="Hi there" required /></p> <p><ul class="errorlist"><li>Enter a valid email address.</li></ul></p> <p>Sender: <input type="email" name="sender" value="invalid email address" required /></p> - <p>Cc myself: <input checked="checked" type="checkbox" name="cc_myself" /></p> + <p>Cc myself: <input checked type="checkbox" name="cc_myself" /></p> .. _ref-forms-error-list-format: @@ -789,7 +798,7 @@ Python 2):: <p>Message: <input type="text" name="message" value="Hi there" required /></p> <div class="errorlist"><div class="error">Enter a valid email address.</div></div> <p>Sender: <input type="email" name="sender" value="invalid email address" required /></p> - <p>Cc myself: <input checked="checked" type="checkbox" name="cc_myself" /></p> + <p>Cc myself: <input checked type="checkbox" name="cc_myself" /></p> More granular output ==================== diff --git a/docs/ref/forms/widgets.txt b/docs/ref/forms/widgets.txt index aae92a37c9..6af97469c9 100644 --- a/docs/ref/forms/widgets.txt +++ b/docs/ref/forms/widgets.txt @@ -11,6 +11,10 @@ A widget is Django's representation of an HTML input element. The widget handles the rendering of the HTML, and the extraction of data from a GET/POST dictionary that corresponds to the widget. +The HTML generated by the built-in widgets uses HTML5 syntax, targeting +``<!DOCTYPE html>``. For example, it uses boolean attributes such as ``checked`` +rather than the XHTML style of ``checked='checked'``. + .. tip:: Widgets should not be confused with the :doc:`form fields </ref/forms/fields>`. diff --git a/docs/releases/1.11.txt b/docs/releases/1.11.txt index cbaf1d5920..381d49a42a 100644 --- a/docs/releases/1.11.txt +++ b/docs/releases/1.11.txt @@ -354,6 +354,9 @@ Miscellaneous argument. Remove it because it doesn't have an effect in older versions of Django as these fields alway strip whitespace. +* The ``checked`` attribute rendered by form widgets now uses HTML5 boolean + syntax rather than XHTML's ``checked='checked'``. + .. _deprecated-features-1.11: Features deprecated in 1.11 diff --git a/tests/forms_tests/tests/test_forms.py b/tests/forms_tests/tests/test_forms.py index a9c3c74b69..2da04a4ef4 100644 --- a/tests/forms_tests/tests/test_forms.py +++ b/tests/forms_tests/tests/test_forms.py @@ -423,19 +423,19 @@ class FormsTestCase(SimpleTestCase): self.assertHTMLEqual(str(f['email']), '<input type="email" name="email" value="test@example.com" required />') self.assertHTMLEqual( str(f['get_spam']), - '<input checked="checked" type="checkbox" name="get_spam" required />', + '<input checked type="checkbox" name="get_spam" required />', ) # 'True' or 'true' should be rendered without a value attribute f = SignupForm({'email': 'test@example.com', 'get_spam': 'True'}, auto_id=False) self.assertHTMLEqual( str(f['get_spam']), - '<input checked="checked" type="checkbox" name="get_spam" required />', + '<input checked type="checkbox" name="get_spam" required />', ) f = SignupForm({'email': 'test@example.com', 'get_spam': 'true'}, auto_id=False) self.assertHTMLEqual( - str(f['get_spam']), '<input checked="checked" type="checkbox" name="get_spam" required />') + str(f['get_spam']), '<input checked type="checkbox" name="get_spam" required />') # A value of 'False' or 'false' should be rendered unchecked f = SignupForm({'email': 'test@example.com', 'get_spam': 'False'}, auto_id=False) @@ -808,20 +808,20 @@ Java</label></li> </ul>""") f = SongForm({'composers': ['J']}, auto_id=False) self.assertHTMLEqual(str(f['composers']), """<ul> -<li><label><input checked="checked" type="checkbox" name="composers" value="J" /> John Lennon</label></li> +<li><label><input checked type="checkbox" name="composers" value="J" /> John Lennon</label></li> <li><label><input type="checkbox" name="composers" value="P" /> Paul McCartney</label></li> </ul>""") f = SongForm({'composers': ['J', 'P']}, auto_id=False) self.assertHTMLEqual(str(f['composers']), """<ul> -<li><label><input checked="checked" type="checkbox" name="composers" value="J" /> John Lennon</label></li> -<li><label><input checked="checked" type="checkbox" name="composers" value="P" /> Paul McCartney</label></li> +<li><label><input checked type="checkbox" name="composers" value="J" /> John Lennon</label></li> +<li><label><input checked type="checkbox" name="composers" value="P" /> Paul McCartney</label></li> </ul>""") # Test iterating on individual checkboxes in a template t = Template('{% for checkbox in form.composers %}<div class="mycheckbox">{{ checkbox }}</div>{% endfor %}') self.assertHTMLEqual(t.render(Context({'form': f})), """<div class="mycheckbox"><label> -<input checked="checked" name="composers" type="checkbox" value="J" /> John Lennon</label></div> +<input checked name="composers" type="checkbox" value="J" /> John Lennon</label></div> <div class="mycheckbox"><label> -<input checked="checked" name="composers" type="checkbox" value="P" /> Paul McCartney</label></div>""") +<input checked name="composers" type="checkbox" value="P" /> Paul McCartney</label></div>""") def test_checkbox_auto_id(self): # Regarding auto_id, CheckboxSelectMultiple is a special case. Each checkbox diff --git a/tests/forms_tests/tests/test_widgets.py b/tests/forms_tests/tests/test_widgets.py index 66d1cbd9b9..fadb786c3b 100644 --- a/tests/forms_tests/tests/test_widgets.py +++ b/tests/forms_tests/tests/test_widgets.py @@ -44,15 +44,15 @@ class FormsWidgetTests(SimpleTestCase): ) ) - self.assertHTMLEqual('\n'.join(inp_set1), """<label><input checked="checked" type="radio" name="beatle" value="J" /> John</label> + self.assertHTMLEqual('\n'.join(inp_set1), """<label><input checked type="radio" name="beatle" value="J" /> John</label> <label><input type="radio" name="beatle" value="P" /> Paul</label> <label><input type="radio" name="beatle" value="G" /> George</label> <label><input type="radio" name="beatle" value="R" /> Ringo</label>""") - self.assertHTMLEqual('\n'.join(inp_set2), """<label><input checked="checked" type="radio" name="beatle" value="J" /> John</label><br /> + self.assertHTMLEqual('\n'.join(inp_set2), """<label><input checked type="radio" name="beatle" value="J" /> John</label><br /> <label><input type="radio" name="beatle" value="P" /> Paul</label><br /> <label><input type="radio" name="beatle" value="G" /> George</label><br /> <label><input type="radio" name="beatle" value="R" /> Ringo</label><br />""") - self.assertHTMLEqual('\n'.join(inp_set3), """<p><input checked="checked" type="radio" name="beatle" value="J" /> John</p> + self.assertHTMLEqual('\n'.join(inp_set3), """<p><input checked type="radio" name="beatle" value="J" /> John</p> <p><input type="radio" name="beatle" value="P" /> Paul</p> <p><input type="radio" name="beatle" value="G" /> George</p> <p><input type="radio" name="beatle" value="R" /> Ringo</p>""") @@ -67,7 +67,7 @@ beatle J R Ringo False""") self.assertHTMLEqual(str(r[1]), '<label><input type="radio" name="beatle" value="P" /> Paul</label>') self.assertHTMLEqual( str(r[0]), - '<label><input checked="checked" type="radio" name="beatle" value="J" /> John</label>' + '<label><input checked type="radio" name="beatle" value="J" /> John</label>' ) self.assertTrue(r[0].is_checked()) self.assertFalse(r[1].is_checked()) @@ -91,7 +91,7 @@ beatle J R Ringo False""") w.render('beatle', 'G'), """<label><input type="radio" name="beatle" value="J" /> John</label><br /> <label><input type="radio" name="beatle" value="P" /> Paul</label><br /> -<label><input checked="checked" type="radio" name="beatle" value="G" /> George</label><br /> +<label><input checked type="radio" name="beatle" value="G" /> George</label><br /> <label><input type="radio" name="beatle" value="R" /> Ringo</label>""" ) @@ -103,7 +103,7 @@ beatle J R Ringo False""") w.render('beatle', 'G'), """<label><input type="radio" name="beatle" value="J" /> John</label><br /> <label><input type="radio" name="beatle" value="P" /> Paul</label><br /> -<label><input checked="checked" type="radio" name="beatle" value="G" /> George</label><br /> +<label><input checked type="radio" name="beatle" value="G" /> George</label><br /> <label><input type="radio" name="beatle" value="R" /> Ringo</label>""" ) @@ -118,7 +118,7 @@ beatle J R Ringo False""") self.assertHTMLEqual( output, """<div id="bar"> -<p><label for="bar_0"><input checked="checked" type="radio" id="bar_0" value="J" name="beatle" /> John</label></p> +<p><label for="bar_0"><input checked type="radio" id="bar_0" value="J" name="beatle" /> John</label></p> <p><label for="bar_1"><input type="radio" id="bar_1" value="P" name="beatle" /> Paul</label></p> <p><label for="bar_2"><input type="radio" id="bar_2" value="G" name="beatle" /> George</label></p> <p><label for="bar_3"><input type="radio" id="bar_3" value="R" name="beatle" /> Ringo</label></p> @@ -133,18 +133,18 @@ beatle J R Ringo False""") choices=zip('abc', 'ABC') ).subwidgets('letters', list('ac')) ), - """<input checked="checked" type="checkbox" name="letters" value="a" id="abc_0" /> + """<input checked type="checkbox" name="letters" value="a" id="abc_0" /> <input type="checkbox" name="letters" value="b" id="abc_1" /> -<input checked="checked" type="checkbox" name="letters" value="c" id="abc_2" />""") +<input checked type="checkbox" name="letters" value="c" id="abc_2" />""") # Each subwidget tag does not get an ID if the widget does not have an ID specified self.assertHTMLEqual( "\n".join(c.tag() for c in CheckboxSelectMultiple( choices=zip('abc', 'ABC'), ).subwidgets('letters', list('ac'))), - """<input checked="checked" type="checkbox" name="letters" value="a" /> + """<input checked type="checkbox" name="letters" value="a" /> <input type="checkbox" name="letters" value="b" /> -<input checked="checked" type="checkbox" name="letters" value="c" />""") +<input checked type="checkbox" name="letters" value="c" />""") # The id_for_label property of the subwidget should return the ID that is used on the subwidget's tag self.assertHTMLEqual( diff --git a/tests/forms_tests/widget_tests/test_checkboxinput.py b/tests/forms_tests/widget_tests/test_checkboxinput.py index 77b03b9ea9..18ffd88d56 100644 --- a/tests/forms_tests/widget_tests/test_checkboxinput.py +++ b/tests/forms_tests/widget_tests/test_checkboxinput.py @@ -18,7 +18,7 @@ class CheckboxInputTest(WidgetTest): def test_render_true(self): self.check_html( self.widget, 'is_cool', True, - html='<input checked="checked" type="checkbox" name="is_cool" />' + html='<input checked type="checkbox" name="is_cool" />' ) def test_render_value(self): @@ -28,7 +28,7 @@ class CheckboxInputTest(WidgetTest): """ self.check_html( self.widget, 'is_cool', 'foo', - html='<input checked="checked" type="checkbox" name="is_cool" value="foo" />', + html='<input checked type="checkbox" name="is_cool" value="foo" />', ) def test_render_int(self): @@ -37,11 +37,11 @@ class CheckboxInputTest(WidgetTest): """ self.check_html( self.widget, 'is_cool', 0, - html='<input checked="checked" type="checkbox" name="is_cool" value="0" />', + html='<input checked type="checkbox" name="is_cool" value="0" />', ) self.check_html( self.widget, 'is_cool', 1, - html='<input checked="checked" type="checkbox" name="is_cool" value="1" />', + html='<input checked type="checkbox" name="is_cool" value="1" />', ) def test_render_check_test(self): @@ -54,13 +54,13 @@ class CheckboxInputTest(WidgetTest): '<input type="checkbox" name="greeting" />' )) self.check_html(widget, 'greeting', 'hello', html=( - '<input checked="checked" type="checkbox" name="greeting" value="hello" />' + '<input checked type="checkbox" name="greeting" value="hello" />' )) self.check_html(widget, 'greeting', 'hello there', html=( - '<input checked="checked" type="checkbox" name="greeting" value="hello there" />' + '<input checked type="checkbox" name="greeting" value="hello there" />' )) self.check_html(widget, 'greeting', 'hello & goodbye', html=( - '<input checked="checked" type="checkbox" name="greeting" value="hello & goodbye" />' + '<input checked type="checkbox" name="greeting" value="hello & goodbye" />' )) def test_render_check_exception(self): diff --git a/tests/forms_tests/widget_tests/test_checkboxselectmultiple.py b/tests/forms_tests/widget_tests/test_checkboxselectmultiple.py index 1e9d31e6a7..10d025e4c2 100644 --- a/tests/forms_tests/widget_tests/test_checkboxselectmultiple.py +++ b/tests/forms_tests/widget_tests/test_checkboxselectmultiple.py @@ -9,7 +9,7 @@ class CheckboxSelectMultipleTest(WidgetTest): def test_render_value(self): self.check_html(self.widget(choices=self.beatles), 'beatles', ['J'], html=( """<ul> - <li><label><input checked="checked" type="checkbox" name="beatles" value="J" /> John</label></li> + <li><label><input checked type="checkbox" name="beatles" value="J" /> John</label></li> <li><label><input type="checkbox" name="beatles" value="P" /> Paul</label></li> <li><label><input type="checkbox" name="beatles" value="G" /> George</label></li> <li><label><input type="checkbox" name="beatles" value="R" /> Ringo</label></li> @@ -19,8 +19,8 @@ class CheckboxSelectMultipleTest(WidgetTest): def test_render_value_multiple(self): self.check_html(self.widget(choices=self.beatles), 'beatles', ['J', 'P'], html=( """<ul> - <li><label><input checked="checked" type="checkbox" name="beatles" value="J" /> John</label></li> - <li><label><input checked="checked" type="checkbox" name="beatles" value="P" /> Paul</label></li> + <li><label><input checked type="checkbox" name="beatles" value="J" /> John</label></li> + <li><label><input checked type="checkbox" name="beatles" value="P" /> Paul</label></li> <li><label><input type="checkbox" name="beatles" value="G" /> George</label></li> <li><label><input type="checkbox" name="beatles" value="R" /> Ringo</label></li> </ul>""" @@ -53,7 +53,7 @@ class CheckboxSelectMultipleTest(WidgetTest): <li>Audio<ul id="media_1"> <li> <label for="media_1_0"> - <input checked="checked" id="media_1_0" name="nestchoice" type="checkbox" value="vinyl" /> Vinyl + <input checked id="media_1_0" name="nestchoice" type="checkbox" value="vinyl" /> Vinyl </label> </li> <li> @@ -66,7 +66,7 @@ class CheckboxSelectMultipleTest(WidgetTest): </li> <li> <label for="media_2_1"> - <input checked="checked" id="media_2_1" name="nestchoice" type="checkbox" value="dvd" /> DVD + <input checked id="media_2_1" name="nestchoice" type="checkbox" value="dvd" /> DVD </label> </li> </ul></li> @@ -85,11 +85,11 @@ class CheckboxSelectMultipleTest(WidgetTest): html = """ <ul id="abc"> <li> - <label for="abc_0"><input checked="checked" type="checkbox" name="letters" value="a" id="abc_0" /> A</label> + <label for="abc_0"><input checked type="checkbox" name="letters" value="a" id="abc_0" /> A</label> </li> <li><label for="abc_1"><input type="checkbox" name="letters" value="b" id="abc_1" /> B</label></li> <li> - <label for="abc_2"><input checked="checked" type="checkbox" name="letters" value="c" id="abc_2" /> C</label> + <label for="abc_2"><input checked type="checkbox" name="letters" value="c" id="abc_2" /> C</label> </li> </ul> """ @@ -103,11 +103,11 @@ class CheckboxSelectMultipleTest(WidgetTest): html = """ <ul id="abc"> <li> - <label for="abc_0"><input checked="checked" type="checkbox" name="letters" value="a" id="abc_0" /> A</label> + <label for="abc_0"><input checked type="checkbox" name="letters" value="a" id="abc_0" /> A</label> </li> <li><label for="abc_1"><input type="checkbox" name="letters" value="b" id="abc_1" /> B</label></li> <li> - <label for="abc_2"><input checked="checked" type="checkbox" name="letters" value="c" id="abc_2" /> C</label> + <label for="abc_2"><input checked type="checkbox" name="letters" value="c" id="abc_2" /> C</label> </li> </ul> """ diff --git a/tests/forms_tests/widget_tests/test_radioselect.py b/tests/forms_tests/widget_tests/test_radioselect.py index cdb9420b15..fea26cece1 100644 --- a/tests/forms_tests/widget_tests/test_radioselect.py +++ b/tests/forms_tests/widget_tests/test_radioselect.py @@ -9,7 +9,7 @@ class RadioSelectTest(WidgetTest): def test_render(self): self.check_html(self.widget(choices=self.beatles), 'beatle', 'J', html=( """<ul> - <li><label><input checked="checked" type="radio" name="beatle" value="J" /> John</label></li> + <li><label><input checked type="radio" name="beatle" value="J" /> John</label></li> <li><label><input type="radio" name="beatle" value="P" /> Paul</label></li> <li><label><input type="radio" name="beatle" value="G" /> George</label></li> <li><label><input type="radio" name="beatle" value="R" /> Ringo</label></li> @@ -37,7 +37,7 @@ class RadioSelectTest(WidgetTest): <li><label for="media_2_0"><input id="media_2_0" name="nestchoice" type="radio" value="vhs" /> VHS</label></li> <li> <label for="media_2_1"> - <input checked="checked" id="media_2_1" name="nestchoice" type="radio" value="dvd" /> DVD + <input checked id="media_2_1" name="nestchoice" type="radio" value="dvd" /> DVD </label> </li> </ul></li> @@ -57,7 +57,7 @@ class RadioSelectTest(WidgetTest): html = """ <ul id="foo"> <li> - <label for="foo_0"><input checked="checked" type="radio" id="foo_0" value="J" name="beatle" /> John</label> + <label for="foo_0"><input checked type="radio" id="foo_0" value="J" name="beatle" /> John</label> </li> <li><label for="foo_1"><input type="radio" id="foo_1" value="P" name="beatle" /> Paul</label></li> <li><label for="foo_2"><input type="radio" id="foo_2" value="G" name="beatle" /> George</label></li> @@ -74,7 +74,7 @@ class RadioSelectTest(WidgetTest): html = """ <ul id="bar"> <li> - <label for="bar_0"><input checked="checked" type="radio" id="bar_0" value="J" name="beatle" /> John</label> + <label for="bar_0"><input checked type="radio" id="bar_0" value="J" name="beatle" /> John</label> </li> <li><label for="bar_1"><input type="radio" id="bar_1" value="P" name="beatle" /> Paul</label></li> <li><label for="bar_2"><input type="radio" id="bar_2" value="G" name="beatle" /> George</label></li> |
