diff --git a/mithril.js b/mithril.js index 7881b338..42c5963b 100644 --- a/mithril.js +++ b/mithril.js @@ -524,7 +524,7 @@ parentTag ) { var nodes = cached.nodes - if (!editable || editable !== $document.activeElement) { + if (!editable || editable !== $document.activeElement || data !== cached) { if (data.$trusted) { clear(nodes, cached) nodes = injectHTML(parentElement, index, data) diff --git a/test/mithril.render.js b/test/mithril.render.js index f851de58..baae9a70 100644 --- a/test/mithril.render.js +++ b/test/mithril.render.js @@ -1588,7 +1588,26 @@ describe("m.render()", function () { m.render(root, m("span", {contenteditable: false}, t1)) expect(root.childNodes[0].innerHTML).to.equal(t1.valueOf()) - }) + + it("editable node w/ focus is updated on data change", function () { + var root = document.createElement('div') + + // need this in order for focus & activeElement to work properly + document.body.appendChild(root) + + m.render(root, m('span', { + config: function(el) { el.focus() }, + contenteditable: true + }, 'a')) + + m.render(root, m('span', { + config: function(el) { el.focus() }, + contenteditable: true + }, 'b')) + + expect(root.childNodes[0].innerHTML).to.equal('b') + }) + }) })