diff --git a/example/index.html b/example/index.html index f059d4a..20fed14 100644 --- a/example/index.html +++ b/example/index.html @@ -83,7 +83,7 @@

Elements

key: k8 - ss + ss
@@ -127,4 +127,4 @@

Console

- \ No newline at end of file + diff --git a/src/DataBind.js b/src/DataBind.js index 55b5ce6..0b1b6d3 100755 --- a/src/DataBind.js +++ b/src/DataBind.js @@ -481,6 +481,13 @@ return result; } + if (el.attributes && el.attributes.contenteditable && el.attributes.contenteditable.value === "true") { + if (isSetter) { + el.innerHTML = newVal; + } + return el.innerHTML; + } + // else assume non-input element if (isSetter) { el.innerText = newVal; @@ -521,6 +528,9 @@ if (['text', 'textarea'].indexOf(el.type) >= 0) { return 'input'; } + if (el.attributes && el.attributes.contenteditable && el.attributes.contenteditable.value === "true") { + return 'keyup'; + } } /** diff --git a/test/DataBind.spec.js b/test/DataBind.spec.js index fe357fc..5ee3d72 100644 --- a/test/DataBind.spec.js +++ b/test/DataBind.spec.js @@ -156,6 +156,23 @@ describe("DataBind", function() { expect( $(elem).text() ).toBe( 'value2' ); }); + it("should span (inline el) be 2-way bound if it has contenteditable", function() { + var elem = document.getElementById('spanEditable'); + $(elem).attr('data-key', 'k1'); + var model = {k1: 'value1'}; + DataBind.bind(elem, model); + expect( $(elem).text() ).toBe( model.k1 ); + + model.k1 = 'value2'; + expect( $(elem).text() ).toBe( 'value2' ); + + $(elem).text('changed via elem.'); + // simulate as if the change was a user input + fireEvent(elem, 'keyup'); + expect( model.k1 ).toBe( 'changed via elem.' ); + + }); + it("should email be 2-way bound", function() { var elem = document.createElement('input'); $(elem).attr('type', 'email'); @@ -615,4 +632,4 @@ describe("DataBind", function() { }); -}); \ No newline at end of file +}); diff --git a/test/index.html b/test/index.html index b5d4116..cc95355 100644 --- a/test/index.html +++ b/test/index.html @@ -60,6 +60,7 @@
dd
ss + ss ss2
@@ -73,4 +74,4 @@
- \ No newline at end of file +