diff --git a/mithril.js b/mithril.js
index bba36074..295aea2d 100644
--- a/mithril.js
+++ b/mithril.js
@@ -346,7 +346,7 @@ var m = (function app(window, undefined) {
//- when using CSS selectors (e.g. `m("[style='']")`), style is used as a string, but it's an object in js
else if (attrName in node && !(attrName === "list" || attrName === "style" || attrName === "form" || attrName === "type")) {
//#348 don't set the value if not needed otherwise cursor placement breaks in Chrome
- if (node[attrName] !== dataAttr) node[attrName] = dataAttr
+ if (attrName != "input" || node[attrName] !== dataAttr) node[attrName] = dataAttr
}
else node.setAttribute(attrName, dataAttr)
}
diff --git a/tests/e2e/tests.js b/tests/e2e/tests.js
index be516c1e..ae1dff2a 100644
--- a/tests/e2e/tests.js
+++ b/tests/e2e/tests.js
@@ -409,8 +409,13 @@ test("mixing trusted content w/ td", function() {
equal(dummyEl.childNodes[1].nodeName, "I")
})
-test("", function() {
+test("0 should not be treated as empty string", function() {
m.render(dummyEl, m("input", {value: ""}))
m.render(dummyEl, m("input", {value: 0}))
equal(dummyEl.childNodes[0].value, "0")
})
+
+test("empty value in ')
+})