Skip to content

Commit 0d892c0

Browse files
okonetzpao
authored andcommitted
Do not render name attribute on INPUT if it is not supplied. Closes #7198. (#7199)
1 parent 5c737b9 commit 0d892c0

File tree

2 files changed

+36
-5
lines changed

2 files changed

+36
-5
lines changed

src/renderers/dom/client/wrappers/ReactDOMInput.js

+6-2
Original file line numberDiff line numberDiff line change
@@ -237,10 +237,14 @@ var ReactDOMInput = {
237237
// Reference: https://bugs.chromium.org/p/chromium/issues/detail?id=608416
238238
// We need to temporarily unset name to avoid disrupting radio button groups.
239239
var name = node.name;
240-
node.name = undefined;
240+
if (name !== '') {
241+
node.name = '';
242+
}
241243
node.defaultChecked = !node.defaultChecked;
242244
node.defaultChecked = !node.defaultChecked;
243-
node.name = name;
245+
if (name !== '') {
246+
node.name = name;
247+
}
244248
},
245249
};
246250

src/renderers/dom/client/wrappers/__tests__/ReactDOMInput-test.js

+30-3
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,35 @@ describe('ReactDOMInput', function() {
111111
expect(div.firstChild.getAttribute('defaultValue')).toBe(null);
112112
});
113113

114+
it('should render name attribute if it is supplied', function() {
115+
var container = document.createElement('div');
116+
var node = ReactDOM.render(<input type="text" name="name" />, container);
117+
expect(node.name).toBe('name');
118+
expect(container.firstChild.getAttribute('name')).toBe('name');
119+
});
120+
121+
it('should render name attribute if it is supplied for SSR', function() {
122+
var element = <input type="text" name="name" />;
123+
var markup = ReactDOMServer.renderToString(element);
124+
var div = document.createElement('div');
125+
div.innerHTML = markup;
126+
expect(div.firstChild.getAttribute('name')).toBe('name');
127+
});
128+
129+
it('should not render name attribute if it is not supplied', function() {
130+
var container = document.createElement('div');
131+
ReactDOM.render(<input type="text" />, container);
132+
expect(container.firstChild.getAttribute('name')).toBe(null);
133+
});
134+
135+
it('should not render name attribute if it is not supplied for SSR', function() {
136+
var element = <input type="text" />;
137+
var markup = ReactDOMServer.renderToString(element);
138+
var div = document.createElement('div');
139+
div.innerHTML = markup;
140+
expect(div.firstChild.getAttribute('name')).toBe(null);
141+
});
142+
114143
it('should display "foobar" for `defaultValue` of `objToString`', function() {
115144
var objToString = {
116145
toString: function() {
@@ -681,7 +710,7 @@ describe('ReactDOMInput', function() {
681710
value="value"
682711
defaultChecked={true}
683712
checked={false}
684-
onChange={() => null}
713+
onChange={() => null}
685714
/>, container);
686715
expect(console.error.calls.count()).toBe(0);
687716
});
@@ -727,10 +756,8 @@ describe('ReactDOMInput', function() {
727756
'set type',
728757
'set value',
729758
'set value',
730-
'set name',
731759
'set checked',
732760
'set checked',
733-
'set name',
734761
]);
735762
});
736763

0 commit comments

Comments
 (0)