diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp
index 9218d84298bcca6565a129c39eb457f3c9517311..312eb9f8e96c086c0a08c707d28ea3017a88b479 100644
--- a/Marlin/ultralcd.cpp
+++ b/Marlin/ultralcd.cpp
@@ -1025,19 +1025,20 @@ void lcd_sdcard_menu() {
 }
 
 #define menu_edit_type(_type, _name, _strFunc, scale) \
-  void menu_edit_ ## _name () { \
+  bool menu_edit_ ## _name () { \
+    bool isClicked = LCD_CLICKED;
     if ((int32_t)encoderPosition < 0) encoderPosition = 0; \
     if ((int32_t)encoderPosition > maxEditValue) encoderPosition = maxEditValue; \
     if (lcdDrawUpdate) \
         lcd_implementation_drawedit(editLabel, _strFunc(((_type)((int32_t)encoderPosition + minEditValue)) / scale)); \
-    if (LCD_CLICKED) { \
+    if (isClicked) { \
       *((_type*)editValue) = ((_type)((int32_t)encoderPosition + minEditValue)) / scale; \
       lcd_goto_menu(prevMenu, prevEncoderPosition); \
     } \
+    return isClicked;
   } \
   void menu_edit_callback_ ## _name () { \
-    menu_edit_ ## _name (); \
-    if (LCD_CLICKED) (*callbackFunc)(); \
+    if (menu_edit_ ## _name ()) (*callbackFunc)(); \
   } \
   static void _menu_action_setting_edit_ ## _name (const char* pstr, _type* ptr, _type minValue, _type maxValue) { \
     prevMenu = currentMenu; \