Skip to content

Commit

Permalink
fix(runtime-dom): enable set form attr to null on form-elements (#2840)…
Browse files Browse the repository at this point in the history
… (#2849)

Co-authored-by: Eduardo San Martin Morote <posva@users.noreply.github.com>
Co-authored-by: Thorsten Lünborg <t.luenborg@googlemail.com>
  • Loading branch information
3 people authored Feb 3, 2021
1 parent 6b0a549 commit f262438
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 4 deletions.
3 changes: 3 additions & 0 deletions packages/runtime-dom/__tests__/patchProps.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -145,5 +145,8 @@ describe('runtime-dom: props patching', () => {
// non existant element
expect(el.form).toBe(null)
expect(el.getAttribute('form')).toBe('foo')
// remove attribute
patchProp(el, 'form', 'foo', null)
expect(el.getAttribute('form')).toBe(null)
})
})
14 changes: 10 additions & 4 deletions packages/runtime-dom/src/patchProp.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,13 @@ import { patchStyle } from './modules/style'
import { patchAttr } from './modules/attrs'
import { patchDOMProp } from './modules/props'
import { patchEvent } from './modules/events'
import { isOn, isString, isFunction, isModelListener } from '@vue/shared'
import {
isOn,
isString,
isFunction,
isModelListener,
isFormTag
} from '@vue/shared'
import { RendererOptions } from '@vue/runtime-core'

const nativeOnRE = /^on[a-z]/
Expand Down Expand Up @@ -93,9 +99,9 @@ function shouldSetAsProp(
return false
}

// #1787 form as an attribute must be a string, while it accepts an Element as
// a prop
if (key === 'form' && typeof value === 'string') {
// #1787, #2840 the form property is readonly and can only be set as an
// attribute using a string value
if (key === 'form' && isFormTag(el.tagName)) {
return false
}

Expand Down
5 changes: 5 additions & 0 deletions packages/shared/src/domTagConfig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,11 @@ const SVG_TAGS =
const VOID_TAGS =
'area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr'

const FORM_TAGS =
'button,datalist,fieldset,input,keygen,label,legend,meter,optgroup,option,' +
'output,progress,select,textarea'

export const isHTMLTag = /*#__PURE__*/ makeMap(HTML_TAGS)
export const isSVGTag = /*#__PURE__*/ makeMap(SVG_TAGS)
export const isVoidTag = /*#__PURE__*/ makeMap(VOID_TAGS)
export const isFormTag = /*#__PURE__*/ makeMap(FORM_TAGS, true)

0 comments on commit f262438

Please sign in to comment.