diff --git a/packages/marko/src/runtime/vdom/VElement.js b/packages/marko/src/runtime/vdom/VElement.js
index f5ee0c8bb..229ec1cba 100644
--- a/packages/marko/src/runtime/vdom/VElement.js
+++ b/packages/marko/src/runtime/vdom/VElement.js
@@ -180,7 +180,7 @@ VElement.prototype = {
}
if (tagName === "textarea") {
- el.value = this.___value;
+ el.defaultValue = el.value = this.___value;
}
}
diff --git a/packages/marko/src/runtime/vdom/morphdom/index.js b/packages/marko/src/runtime/vdom/morphdom/index.js
index 5de17ac00..bfade90e2 100644
--- a/packages/marko/src/runtime/vdom/morphdom/index.js
+++ b/packages/marko/src/runtime/vdom/morphdom/index.js
@@ -88,7 +88,9 @@ function morphdom(fromNode, toNode, doc, componentsContext) {
] = realNode;
}
- morphChildren(realNode, vNode, parentComponent);
+ if (vNode.___nodeName !== "textarea") {
+ morphChildren(realNode, vNode, parentComponent);
+ }
}
onNodeAdded(realNode, componentsContext);
diff --git a/packages/marko/test/components-browser/fixtures/form-controls-default-value/index.marko b/packages/marko/test/components-browser/fixtures/form-controls-default-value/index.marko
new file mode 100644
index 000000000..1acfc8fd0
--- /dev/null
+++ b/packages/marko/test/components-browser/fixtures/form-controls-default-value/index.marko
@@ -0,0 +1,6 @@
+class {}
+
+
+
+
+
diff --git a/packages/marko/test/components-browser/fixtures/form-controls-default-value/test.js b/packages/marko/test/components-browser/fixtures/form-controls-default-value/test.js
new file mode 100644
index 000000000..487b52614
--- /dev/null
+++ b/packages/marko/test/components-browser/fixtures/form-controls-default-value/test.js
@@ -0,0 +1,14 @@
+var expect = require("chai").expect;
+
+module.exports = function(helpers) {
+ var component = helpers.mount(require.resolve("./index.marko"));
+
+ expect(component.getEl("a")).has.property("defaultValue", "abc");
+ expect(component.getEl("a")).has.property("defaultChecked", true);
+
+ expect(component.getEl("b")).has.property("defaultValue", "abc");
+ expect(component.getEl("b")).has.property("defaultChecked", false);
+
+ expect(component.getEl("c")).has.property("defaultValue", "abc");
+ expect(component.getEl("d")).has.property("defaultValue", "abc");
+};