diff --git a/src/shared/dom.js b/src/shared/dom.js
index efcec97fb3..0eb53585d7 100644
--- a/src/shared/dom.js
+++ b/src/shared/dom.js
@@ -87,8 +87,12 @@ export function setAttribute(node, attribute, value) {
export function setAttributes(node, attributes) {
for (var key in attributes) {
- if (attributes[key] === undefined) removeAttribute(node, key);
- else setAttribute(node, key, attributes[key]);
+ if (key in node) {
+ node[key] = attributes[key];
+ } else {
+ if (attributes[key] === undefined) removeAttribute(node, key);
+ else setAttribute(node, key, attributes[key]);
+ }
}
}
diff --git a/test/runtime/samples/spread-element-boolean/_config.js b/test/runtime/samples/spread-element-boolean/_config.js
new file mode 100644
index 0000000000..83a1590f29
--- /dev/null
+++ b/test/runtime/samples/spread-element-boolean/_config.js
@@ -0,0 +1,27 @@
+export default {
+ data: {
+ props: {
+ disabled: true
+ }
+ },
+
+ html: `
+
+ `,
+
+ test(assert, component, target) {
+ const button = target.querySelector('button');
+
+ assert.ok(button.disabled);
+
+ component.set({
+ props: { disabled: false }
+ });
+
+ assert.htmlEqual(
+ target.innerHTML,
+ ``
+ );
+ assert.ok(!button.disabled);
+ },
+};
diff --git a/test/runtime/samples/spread-element-boolean/main.html b/test/runtime/samples/spread-element-boolean/main.html
new file mode 100644
index 0000000000..9469dab0d6
--- /dev/null
+++ b/test/runtime/samples/spread-element-boolean/main.html
@@ -0,0 +1 @@
+
\ No newline at end of file