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', ]); });