소스 검색

fix: always treat spellcheck and draggable as attributes

fix #1350
Evan You 5 년 전
부모
커밋
4492b88938
1개의 변경된 파일10개의 추가작업 그리고 2개의 파일을 삭제
  1. 10 2
      packages/runtime-dom/src/patchProp.ts

+ 10 - 2
packages/runtime-dom/src/patchProp.ts

@@ -34,7 +34,15 @@ export const patchProp: RendererOptions<Node, Element>['patchProp'] = (
           patchEvent(el, key, prevValue, nextValue, parentComponent)
         }
       } else if (
-        isSVG
+        // spellcheck and draggable are numerated attrs, however their
+        // corresponding DOM properties are actually booleans - this leads to
+        // setting it with a string "false" value leading it to be coerced to
+        // `true`, so we need to always treat them as attributes.
+        // Note that `contentEditable` doesn't have this problem: its DOM
+        // property is also enumerated string values.
+        key !== 'spellcheck' &&
+        key !== 'draggable' &&
+        (isSVG
           ? // most keys must be set as attribute on svg elements to work
             // ...except innerHTML
             key === 'innerHTML' ||
@@ -43,7 +51,7 @@ export const patchProp: RendererOptions<Node, Element>['patchProp'] = (
           : // for normal html elements, set as a property if it exists
             key in el &&
             // except native onclick with string values
-            !(nativeOnRE.test(key) && isString(nextValue))
+            !(nativeOnRE.test(key) && isString(nextValue)))
       ) {
         patchDOMProp(
           el,