diff --git a/CHANGELOG.md b/CHANGELOG.md
index d931aa930db2c5dec6498df844e699fc66316c39..847e6bca53d1c313ace064ce6c951ef88a10cef5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,8 @@ current (development)
 ### Component
 - Feature: Add support for `Input`'s insert mode. Add `InputOption::insert`
   option. Added by @mingsheng13.
+- Bugfix: `Input` `onchange` was not called on backspace or delete key.
+  Fixed by @chrysante in chrysante in PR #776.
 
 ### Dom
 - Feature: Add `hscroll_indicator`. It display an horizontal indicator
diff --git a/src/ftxui/component/input.cpp b/src/ftxui/component/input.cpp
index caef66c1039789a34333e7fbd14640a810c4de11..7228f1310c5a038ea600a3443201e7483c4f9d4e 100644
--- a/src/ftxui/component/input.cpp
+++ b/src/ftxui/component/input.cpp
@@ -207,10 +207,11 @@ class InputBase : public ComponentBase, public InputOption {
     const size_t end = cursor_position();
     content->erase(start, end - start);
     cursor_position() = start;
+    on_change();
     return true;
   }
 
-  bool HandleDelete() {
+  bool DeleteImpl() {
     if (cursor_position() == (int)content->size()) {
       return false;
     }
@@ -220,6 +221,14 @@ class InputBase : public ComponentBase, public InputOption {
     return true;
   }
 
+  bool HandleDelete() {
+    if (DeleteImpl()) {
+      on_change();
+      return true;
+    }
+    return false;
+  }
+
   bool HandleArrowLeft() {
     if (cursor_position() == 0) {
       return false;
@@ -345,7 +354,7 @@ class InputBase : public ComponentBase, public InputOption {
   bool HandleCharacter(const std::string& character) {
     if (!insert() && cursor_position() < (int)content->size() &&
         content()[cursor_position()] != '\n') {
-      HandleDelete();
+      DeleteImpl();
     }
     content->insert(cursor_position(), character);
     cursor_position() += character.size();