diff --git a/src/runtime/internal/dom.ts b/src/runtime/internal/dom.ts index adfdc8e3ba..11e2f43ee9 100644 --- a/src/runtime/internal/dom.ts +++ b/src/runtime/internal/dom.ts @@ -305,8 +305,17 @@ export function set_attributes(node: Element & ElementCSSInlineStyle, attributes } else if (key === '__value') { (node as any).value = node[key] = attributes[key]; } else if (descriptors[key] && descriptors[key].set) { + // For example, if an element has spread attributes, + // when a user inputs a value, spread attributes also will be updated, and it spoils the next user's input. + // So we need to skip updating if it's not changed. + // e.g. + // + // if (node[key] !== attributes[key]) { - node[key] = attributes[key]; + node[key] = attributes[key]; } } else { attr(node, key, attributes[key]);