diff --git a/src/renderers/dom/client/wrappers/ReactDOMInput.js b/src/renderers/dom/client/wrappers/ReactDOMInput.js
index bd407343d564d..d8730c2a21c84 100644
--- a/src/renderers/dom/client/wrappers/ReactDOMInput.js
+++ b/src/renderers/dom/client/wrappers/ReactDOMInput.js
@@ -237,10 +237,14 @@ var ReactDOMInput = {
// Reference: https://bugs.chromium.org/p/chromium/issues/detail?id=608416
// We need to temporarily unset name to avoid disrupting radio button groups.
var name = node.name;
- node.name = undefined;
+ if (name !== '') {
+ node.name = '';
+ }
node.defaultChecked = !node.defaultChecked;
node.defaultChecked = !node.defaultChecked;
- node.name = name;
+ if (name !== '') {
+ node.name = name;
+ }
},
};
diff --git a/src/renderers/dom/client/wrappers/__tests__/ReactDOMInput-test.js b/src/renderers/dom/client/wrappers/__tests__/ReactDOMInput-test.js
index 8f047bffdc258..d6ce15e74a8bb 100644
--- a/src/renderers/dom/client/wrappers/__tests__/ReactDOMInput-test.js
+++ b/src/renderers/dom/client/wrappers/__tests__/ReactDOMInput-test.js
@@ -102,6 +102,35 @@ describe('ReactDOMInput', function() {
expect(div.firstChild.getAttribute('defaultValue')).toBe(null);
});
+ it('should render name attribute if it is supplied', function() {
+ var container = document.createElement('div');
+ var node = ReactDOM.render(, container);
+ expect(node.name).toBe('name');
+ expect(container.firstChild.getAttribute('name')).toBe('name');
+ });
+
+ it('should render name attribute if it is supplied for SSR', function() {
+ var element = ;
+ var markup = ReactDOMServer.renderToString(element);
+ var div = document.createElement('div');
+ div.innerHTML = markup;
+ expect(div.firstChild.getAttribute('name')).toBe('name');
+ });
+
+ it('should not render name attribute if it is not supplied', function() {
+ var container = document.createElement('div');
+ ReactDOM.render(, container);
+ expect(container.firstChild.getAttribute('name')).toBe(null);
+ });
+
+ it('should not render name attribute if it is not supplied for SSR', function() {
+ var element = ;
+ var markup = ReactDOMServer.renderToString(element);
+ var div = document.createElement('div');
+ div.innerHTML = markup;
+ expect(div.firstChild.getAttribute('name')).toBe(null);
+ });
+
it('should display "foobar" for `defaultValue` of `objToString`', function() {
var objToString = {
toString: function() {
@@ -672,7 +701,7 @@ describe('ReactDOMInput', function() {
value="value"
defaultChecked={true}
checked={false}
- onChange={() => null}
+ onChange={() => null}
/>, container);
expect(console.error.calls.count()).toBe(0);
});
@@ -718,10 +747,8 @@ describe('ReactDOMInput', function() {
'set type',
'set value',
'set value',
- 'set name',
'set checked',
'set checked',
- 'set name',
]);
});