diff --git a/js/maxlength.js b/js/maxlength.js
index ce7a44e206b5b6313f458db44885b821c5951869..14b19f73d8f19be706cde1b96374714cb683e905 100644
--- a/js/maxlength.js
+++ b/js/maxlength.js
@@ -414,14 +414,15 @@
    */
   ml.ckeditor5 = function (editor, options) {
     $(once('maxlengthbinding', editor.sourceElement)).each(function() {
-      editor.model.document.on('change', function() {
-        if (editor.getData() !== editor.sourceElement.textContent) {
+      // Listen to changes to data only.
+      editor.model.document.on('change:data', function() {
+        let editorData = editor.getData();
+        if (editorData !== editor.sourceElement.textContent) {
           // Trim if limit is reached and enforcing is activated.
           if (options['enforce']) {
             let maxlength = $(editor.sourceElement).data('maxlength');
-            let data = editor.getData();
-            let trimmed = ml.truncate_html(data, maxlength);
-            if (data.length !== trimmed.length) {
+            const trimmed = ml.truncate_html(editorData, maxlength);
+            if (editorData.length !== trimmed.length) {
               editor.setData(trimmed);
               setTimeout(() => {
                 editor.model.change( writer => {